C# Mehrere bewegte Bilder (z.B. Pictureboxen) die sich verändern?
Hallo liebe Community!
Ich programmiere schon länger C# und habe auch schon im Graphics-Bereich etwas gemacht.
Mein Problem: Wenn ich z.B. ein Ufo habe (Picturebox), welches dauerhaft von einer Schleife aus einem anderen Thread an die Position des Cursors gehalten wird, und dazu noch ungefähr 10 Kometen, die sich gleichzeitig alle bewegen, ruckelt das ganze extrem.
Meine Überlegung: Ich denke dass die häufige Bewegung und Ansprachen der Form und der Pictureboxen aus mehreren anderen Threads einfach das Programm überlasten.
Meine Frage: Was kann ich tun, um die Form nicht so zu überlasten und das ganze ohne ruckeln ablaufen zu lassen?
Vielen Dank im Vorraus.
1 Antwort
Eine möglichkeit wäre, statt nen Haufen PictureBoxen eine einzige PictureBox zu nehmen, das ganze "Rendering" auf einem System.Drawing.Bitmap durchzuführen und dann der PictureBox dieses als "Image" zuzuweisen.
Im Grunde also etwas in der Art:
public struct Ufo{
public Bitmap Bitmap;
public int X, Y;
}
public struct Comet{
public Bitmap Bitmap;
public int X, Y;
}
public class DaGame{
private Ufo ufo;
private List<Comet> comets;
public DaGame(){
ufo = new Ufo(){Bitmap = new Bitmap("ufo.png"), X = 0, Y = 0};
comets = new List<Comet>();
}
void RenderFrame(Bitmap frame){
Graphics g = Graphics.FromImage(frame);
g.DrawImage(ufo.Bitmap, ufo.X, ufo.Y);
foreach(Comet comet in comets){
g.DrawImage(comet.Bitmap, Comet.X, Comet.Y);
}
}
}
P.S.: Das ganze ist nur eine Art grobe Vorlage, mit ein bisschen Arbeit dürfte das allerdings funktionieren... Und zwar nicht unerheblich schneller als mit nem Haufen PictureBoxen...
Okay danke, hatte auch schonmal daran gedacht, werde das in ein Panel rendern.