Raster Entwicklung für das einfachere platzieren von Image Boxen (PictureBox)

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von RexoZZeX.

    Raster Entwicklung für das einfachere platzieren von Image Boxen (PictureBox)

    Oh man!!

    Hallo erstmal, lang ist's her. :D
    Hmm... wie fange ich am besten an? ?(
    Also, ich war gerade voll im Entwicklungs-Modus, als ich mir: "ja was ist denn das, wie soll ich das den bitte hinkriegen?" dachte.
    Mein momentanes project(bin auch im Englisch-Modus unterwegs 8)) ist ein, nein wartet, ich probier's mal so.
    Also, einige von euch kennen doch auf jeden Fall den Super Mario Maker, hmm? Nein? Nicht? Natürlich kennt ihr den, spielt mir nichts vor. 8|
    Auf jeden Fall möchte ich DEN als C#-Kenntnis-Erlern-Aufbau nach entwickeln, und naja auch vill. um die Bedürfnisse andere lebenden Individuen zu stillen. :P
    Weil, sind wir mal ehrlich, der Maker (der übrigens in erst 3 Tagen auf'n Markt kommt) nicht so besonder viele Features aufweist, oder?
    Ja kann auch daran liegen dass er noch immmer in Entwicklung steht, aber trotzdem!

    Aber nun zum eigentlichen Teil!

    Also mein Anliegen läge darin einen Raster auf die Form zu zeichnen den man je nach Bedürfnis ein/ausblenden kann, auf dem die PictureBoxes einrasten (in den offenen Feldern des Rasters).

    Ich hab das jetz mit 3 diversen Methoden probiert!
    Erfolglos :thumbdown:

    Meine erste Methode war es die Raster mit "DrawLine" zu zeichnen, leider hat er die zwischenfeldernicht als Rasterfeld erkennen könne, weils ja eben nur gezeichnet war.
    Darauf bin ich aber erst gekommen nachdem ich es mit Methode 2 mit "DrawRectangle" zu praktizieren versuchte.
    Methode 3 war es PictureBoxes innerhalb der Form mit einer "For"-Schleife hinzuzufügen, hat ja auch geklappt bei ein paar Boxen!
    Aber wenn ich mehrere hinzufügen wollte ging mein Rechner, "OutOfMemory", versteht ihr?
    Naja, ist ja auch logisch wenn man einfach mal so 3000 Boxen auf die Form kriegen will! Außerdem hätte es mit dieser Methode, sehr warscheinlich, ziemlich geflackert! :D

    Nun möchte ich es aber irgendwie darauf hinaus laufen lassen das er nur ein Raster "zeichnet"(eher schlechte Idee :thumbdown: ) und ich in jedem Zwischenfeld eine PictureBox nach Bedarf adden kann!

    Wie mach ich das?

    Danke
    Lg RexoZZeX

    Titel angepasst. ~Trade

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Trade“ ()

    PictureBoxen sind hier der komplett falsche Ansatz. Du solltest dein Spielfeld komplett mit GDI+ oder DirectX selbst zeichnen. Um nicht direkt mit einer dieser Technologien arbeiten zu müssen, würde ich dir eine Game-Engine empfehlen.
    Ach das gute alte GDI+ kam ja schon zum Einsatz, aber er kann nicht erkennen das eine, beispielsweise, gezeichnete Linie der Trennmuskel für die hinzuzugügenden Controls ist!

    Oder meinst du auch die Blöcke für die Welten zum kollidieren gegen den Gegner zeichen?

    Das Problem ist ja, woher soll den mein Programm den Wissen das eine Zeichnung ein Objekt ist?

    RexoZZeX schrieb:

    mein Antiviren Programm hat ausgeschlagen bei der Datei!

    Avast, Avira oder was nutzt Du denn? Wenn ja, bleib' einfach beim Windows Defender, der reicht vollkommen. AV ist sowieso nutzlos. ;)</offtopic>
    Ich hatte es auf jeden Fall auch und da ist kein Schadcode enthalten.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    OK :D
    Ich benutze Kaspersky!!

    Mein Aktueller Source Code sieht so aus!

    Bitte bei dem Code nicht erschrecken ich bin ein Laie (ohh mein Gott ein Anfänger, verbrennt ihn)

    Spoiler anzeigen

    Quellcode

    1. using System;
    2. using System.Collections.Generic;
    3. using System.ComponentModel;
    4. using System.Data;
    5. using System.Drawing;
    6. using System.Linq;
    7. using System.Text;
    8. using System.Threading.Tasks;
    9. using System.Windows.Forms;
    10. using System.Drawing.Drawing2D;
    11. using System.Threading;
    12. using System.Diagnostics;
    13. using System.IO;
    14. namespace Super_World_Maker
    15. {
    16. public partial class Display : Form
    17. {
    18. string blockImage = "";
    19. Panel previewPlay = new Panel();
    20. Button addBlock = new Button();
    21. Button addBlock2 = new Button();
    22. PictureBox[] Blocks = new PictureBox[3002];
    23. int cellSize;
    24. int blocks = 0;
    25. private void drawCells()
    26. {
    27. for (int i = 0; i < 200; i++) {
    28. for (int x = 0; x < 15; x++)
    29. {
    30. Blocks[blocks] = new PictureBox();
    31. Blocks[blocks].Size = new Size(cellSize, cellSize);
    32. Blocks[blocks].Location = new Point(i * cellSize, x * cellSize);
    33. Blocks[blocks].BorderStyle = BorderStyle.FixedSingle;
    34. Blocks[blocks].SizeMode = PictureBoxSizeMode.StretchImage;
    35. Blocks[blocks].Click += new EventHandler(mDownBlockPic);
    36. Blocks[blocks].MouseDoubleClick += mDblBlockPic;
    37. Blocks[blocks].Tag = blocks;
    38. Blocks[blocks].Load(AppDomain.CurrentDomain.BaseDirectory + "assets/air.png");
    39. this.previewPlay.Controls.Add(Blocks[blocks]);
    40. ++blocks;
    41. }
    42. }
    43. }
    44. private void mDblBlockPic(object sender, MouseEventArgs e)
    45. {
    46. int index = int.Parse((sender as PictureBox).Tag.ToString());
    47. if (Blocks[index].ImageLocation != "")
    48. Blocks[index].Load(AppDomain.CurrentDomain.BaseDirectory + "assets/air.png");
    49. }
    50. private void mDownBlockPic(object sender, EventArgs e)
    51. {
    52. int index = int.Parse((sender as PictureBox).Tag.ToString());
    53. if (blockImage != "")
    54. Blocks[index].Load(blockImage);
    55. }
    56. public Display()
    57. {
    58. InitializeComponent();
    59. SetStyle(ControlStyles.AllPaintingInWmPaint, true);
    60. SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
    61. SetStyle(ControlStyles.ResizeRedraw, false);
    62. SetStyle(ControlStyles.UserPaint, true);
    63. SetStyle(ControlStyles.SupportsTransparentBackColor, true);
    64. DoubleBuffered = true;
    65. UpdateStyles();
    66. loadEvents();
    67. }
    68. private void Display_Load(object sender, EventArgs e)
    69. {
    70. this.WindowState = FormWindowState.Maximized;
    71. this.FormBorderStyle = FormBorderStyle.None;
    72. cellSize = this.Height / 15;
    73. this.Controls.Add(addBlock);
    74. this.addBlock.Name = "Test";
    75. this.addBlock.Location = new Point(0, 100);
    76. this.Controls.Add(addBlock2);
    77. this.addBlock2.Name = "Test2";
    78. this.Controls.Add(previewPlay);
    79. this.previewPlay.AutoScroll = true;
    80. this.previewPlay.BackColor = Color.Black;
    81. this.previewPlay.Size = new Size(this.Width, this.Height);
    82. this.previewPlay.BackColor = Color.SkyBlue;
    83. drawCells();
    84. loadConf();
    85. }
    86. private void loadEvents()
    87. {
    88. this.previewPlay.Paint += paintPreview;
    89. this.addBlock.Click += clickAddBlock;
    90. this.addBlock2.Click += clickAddBlock2;
    91. }
    92. private void clickAddBlock(object sender, EventArgs e)
    93. {
    94. blockImage = AppDomain.CurrentDomain.BaseDirectory + "assets/ground.png";
    95. }
    96. private void clickAddBlock2(object sender, EventArgs e)
    97. {
    98. StreamWriter sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "preview.txt");
    99. for (int i = 0; i < blocks; i++)
    100. {
    101. if (Blocks[i].ImageLocation == "")
    102. {
    103. sw.WriteLine(Blocks[i].Tag.ToString() + ":EMPTY");
    104. }
    105. else
    106. {
    107. sw.WriteLine(Blocks[i].Tag.ToString() + "=" + Blocks[i].ImageLocation.ToString());
    108. }
    109. }
    110. sw.Close();
    111. }
    112. private void loadConf()
    113. {
    114. string[] allLines = new string[blocks];
    115. string[] image = new string[allLines.Length];
    116. try
    117. {
    118. using (StreamReader sr = File.OpenText(AppDomain.CurrentDomain.BaseDirectory + "preview.txt"))
    119. {
    120. int i = 0;
    121. while (!sr.EndOfStream)
    122. {
    123. allLines[i] = sr.ReadLine();
    124. i += 1;
    125. }
    126. }
    127. for (int i = 0; i < allLines.Length; i++)
    128. {
    129. image[i] = allLines[i].Split(new[] { "=" }, StringSplitOptions.None)[1];
    130. Blocks[i].Load(image[i]);
    131. }
    132. }
    133. catch (Exception)
    134. {
    135. MessageBox.Show("Es konnte keine Welt gefunden werden!");
    136. }
    137. }
    138. private void paintPreview(object sender, PaintEventArgs e)
    139. {
    140. }
    141. }
    142. }



    EDIT: jetzt hab ich mir mal den SourceCode angesehen und fühle mich direkt schlecht bei dem was ich da zusammengewurstet hab <X

    Ich werds einfach lassen, ich kriegs sowieso nich hin! :|

    Crosspost nach einer halben Stunde? Dafür gibt es die "Editieren"-Funktion.
    => Beiträge zusammen- und Spoiler eingefügt.
    ~Trade

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Trade“ ()