Hey Leutz, ich hab vor kurzem mit der Programmierung in C# .Net angefangen. Im Moment arbeite
ich an einer Art kleinem 2D Spiel. Ich hab da nur ein kleines Problem und zwar hab ich mir folgendes
Modell überlegt: Ich hab den Hintergrund in der PictureBox und mein "Raumschiff" bewegt sich da
mittels WASD Steuerung über den Hintergrund indem ich immer wieder ein neues Rectangle erstelle.
Meine Frage ist nun, wie kann ich das alte löschen ^^ Ich habs schon mit nem transparenten Bild
versucht, aber das malt nur drüber...
Rectangle Rec1;
Pen Stift = new Pen(Color.Red, 0.1f);
Graphics g;
TextureBrush tBrush = new TextureBrush(Image.FromFile("rocket.PNG"));
TextureBrush tBEmpty = new TextureBrush(Image.FromFile("empty.PNG"));
private void button1_Click(object sender, EventArgs e)
{
g = pictureBox1.CreateGraphics();
/*
Bitmap Raumschiff = new Bitmap("rocket.PNG");
Raumschiff.MakeTransparent();
Image iRaum = Image.FromHbitmap(Raumschiff.GetHbitmap());
g.DrawImage(iRaum, 60, 0);
*/
Rec1 = new Rectangle(0, 0, 60, 61);
g.FillRectangle(tBrush, Rec1);
g.DrawRectangle(Stift, Rec1);
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == Keys.W)
{
Rec1.Y -= 61;
g.FillRectangle(tBrush, Rec1);
MessageBox.Show("Oben wurde gedrückt!");
}
else if (e.KeyData == Keys.S)
{
//g.FillRectangle(tBEmpty, Rec1);
Rec1.Y += 61;
g.FillRectangle(tBrush, Rec1);
MessageBox.Show("Unten wurde gedrückt!");
}
else if (e.KeyData == Keys.D)
{
g.FillRectangle(tBEmpty, Rec1);
Rec1.X += 60;
g.FillRectangle(tBrush, Rec1);
MessageBox.Show("Rechts wurde gedrückt!");
}
else if (e.KeyData == Keys.A)
{
Rec1.X -= 60;
g.FillRectangle(tBrush, Rec1);
MessageBox.Show("Links wurde gedrückt!");
}
}
Ich hoffe ihr könnt mir da weiterhelfen 😃
Du musst das Bild komplett überschreiben, also den Hintergrund wieder drüberzeichnen und dann deine Objekte an der neuen Position.
Hallo und willkommen im Forum,
selber ein Graphics-Objekt zu erstellen ist keine gute Idee.
Wenn Du PictureBoxen verwenden willst, benutze lieber Graphics.FromImage
mit dem Image
der PictureBox.
Du kannst aber auch ohne PictureBox direkt ins Fenster zeichnen. Dann rufst Du zum neuzeichnen Invalidate()
auf und zeichnest dann im OnPaint
- da bekommst Du ein Graphics-Objekt in den EventArgs übergeben. Der Aufruf von Invalidate löst das Paint-Ereignis aus und erklärt den Zeichenbereich für ungültig, dann zeichnest Du das gesamte aktuelle Bild neu.
Ein Beispiel dafür findest Du in diesem Beitrag: Das Programmier-Spiel: nette Übungsaufgaben für zwischendurch
Lies zu dieser Thematik bitte unbedingt auch [Tutorial] Zeichnen in Windows-Forms-Programmen (Paint/OnPaint, PictureBox)
Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
Hallo animet,
Du kannst aber auch ohne PictureBox direkt ins Fenster zeichnen.
... und solltest das auch tun, die Variante mit Graphics.FromImage eignet sich nicht für ständig wechselnde Bildinhalte. Mal abgesehen davon, dass man auch dort Invalidate aufrufen muss, damit die Änderungen sichtbar werden. Anderseits braucht man eine PictureBox nur, wenn man auch tatsächlich PictureBox.Image verwendet. Wenn man das nicht tut, nimmt man besser ein Panel oder zeichnet direkt in das Form.
Lies zu dieser Thematik bitte unbedingt auch
>
Wobei wir hier voraussetzen, dass man sich von sich von aus solche Tutorial sucht und durcharbeitet, bevor man fragt, siehe [Hinweis] Wie poste ich richtig? Punkt 1.1.1 und 1.1.
herbivore