Benutzer mit den meisten Antworten
Visual Studio Picturebox drehen

Frage
-
Hallo,
ich habe eine Frage zu einer Picturebox. Undzwar möchte ich wissen, wie man diese mithilfe von W, A, S, D drehen kann. Mit W "läuft" mein Pacman nach oben, mit D nach rechts, mit S nach unten, mit A nach links. Allerdings schaut mein PAcman natürlich nur in eine Richtung, nun möchte ich es so ändern, dass, wenn mein Pacman nach oben läuft, also muss sich die Picturebox ja drehen. Dort liegt allerdings mein Problem. Habe es schon mit folgenden Zeilen versucht, allerdings klappt dies nicht:
(pctGespenst ist das Pacman) pctGespenst.Image.RotateFlip(RotateFlipType.Rotate180FlipX);
pctGespenst.Refresh();Mein gesamter Quellcode sieht wie folgt aus:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.S)
{
if (pctGespenst.Top < 450)
{
pctGespenst.Top = pctGespenst.Top + 10;
}
}
else if (e.KeyCode == Keys.W)
{
if (pctGespenst.Top > 0)
{
pctGespenst.Top = pctGespenst.Top - 10;
}
}
else if (e.KeyCode == Keys.D)
{
if (pctGespenst.Left < 700)
{
pctGespenst.Left = pctGespenst.Left + 10;
}
}
else if (e.KeyCode == Keys.A)
{
if (pctGespenst.Left > 0)
{
pctGespenst.Left = pctGespenst.Left - 10;
}
}
}Ich hoffe, dass Ihr mir irgendwie helfen könnt. Meine Form ist ein schwarzer Hintergrund und in der Picturebox ist ein gelbes Pacman wie man es kennt.
Danke schonmal für's durchlesen
Antworten
-
Hi,
was genau klappt da nicht?
pctGespenst.Image.RotateFlip(RotateFlipType.Rotate180FlipX);
sollte eigentlich genau das tun, was Du angegeben hast. Um 180° drehen und dann über die X Achse spiegeln.
Ein Problem wird sein, dass Du immer vom letzten Bild ausgehst. Du müsstest aber in deinem Fall eigentlich immer vom Originalbild ausgehen, sonst drehst Du das bereits gedrehte Bild zwar evtl. um 90 oder 180°, das Ausgangsbild ist aber schon falsch.
Im Webbereich würde ich das komplett anders angehen, bei WinForms evtl. so:
public class Form1 : Form Image originalImage { get; set; } public Form1() { ... this.originalImage = Image.FromFile( @"X:\Ordner\Datei.png" ); } private void Form1_KeyDown(object sender, KeyEventArgs e) { pctGespenst.Image = ((Image)originalImage.Clone()); if (e.KeyCode == Keys.W) { // Keine Änderung notwendig, Standardbild ist nach oben ausgerichtet } if (e.KeyCode == Keys.A) { pctGespenst.Image.RotateFlip( RotateFlipType.Rotate270FlipNone ); } if (e.KeyCode == Keys.S) { pctGespenst.Image.RotateFlip( RotateFlipType.Rotate180FlipNone ); } if (e.KeyCode == Keys.D) { pctGespenst.Image.RotateFlip( RotateFlipType.Rotate90FlipNone ); } pctGespenst.Refresh(); e.Handled = true; } }
Allerdings muss man bei Images, Bitmaps, ... immer drauf achten, dass die auch wieder entsorgt werden. WinForms ist aber nicht so wirklich meine Welt, daher muss das jemand anders beantworten :)
---
Es wäre aber ggfs. sinnvoller, einfach 4 Imageobjekte zu erstellen, die so aussehen, wie Du das haben willst und diese dann der PictureBox beim jeweiligen Tastendruck zuzuweisen. Bei der o.g. Variante wird 10000 mal Clone, ... aufgerufen, wenn man 10000 mal auf die Tasten drückt. Das ist natürlich nicht sonderlich ressourcenschonend.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport
- Bearbeitet Stefan FalzModerator Freitag, 15. Februar 2019 17:47
- Als Antwort vorgeschlagen Guido Franzke Montag, 18. Februar 2019 09:20
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 25. Februar 2019 11:08