Naja, es ruckelt schon ein bisschen. DoubleBuffered ist True. Die Zeichnen-procedure (nested procedure, weil ich hier gelesen hab, dass das schneller ist) sieht so aus:
(Wert ist ein Array[1..7, 1..4], in dem Daten wie z.B. X-, Y-Position, Radius, Geschwindigkeit usw von Spieler 1 und 2 sowie von 2 Beamlöchern gespeichert sind. X, Y, Radius sind Integer-Konstanten.
Delphi-Quellcode:
procedure Zeichnen(
Cvs: TCanvas; Spieler: Byte);
begin
with Cvs do begin
Pen.Color := Farbe[Spieler];
Brush.Color := Farbe[Spieler];
Ellipse(Wert[X, Spieler] - Wert[Radius, Spieler],
Wert[Y, Spieler] - Wert[Radius, Spieler],
Wert[X, Spieler] + Wert[Radius, Spieler],
Wert[Y, Spieler] + Wert[Radius, Spieler]);
end;
end;
Es wird nicht direkt auf das Image gezeichnet, sondern erst aufs Canvas einer globalen Variablen von Typ TBitmap. Ich erzeuge das Bitmap nicht immer neu, weil ich mir dachte, dass wichtige Zeit verloren geht, wenn ich jedesmal Bmp.Width und Height anpassen müsste und immer wieder Bmp := TBitmap.Create und Bmp.Free aufgerufen wird. Ist dieser Zeitgewinn kleiner als der Zeitverlust, der entsteht, weil Bmp global statt lokal ist?
Delphi-Quellcode:
with Bmp.Canvas do
begin
Pen.Color := $00D8E9EC;
Brush.Color := $00D8E9EC;
Rectangle(0, 0, Bmp.Width, Bmp.Height);
end;
Zeichnen(Bmp.Canvas, Loch1);
Zeichnen(Bmp.Canvas, Loch2);
Zeichnen(Bmp.Canvas, 1);
Zeichnen(Bmp.Canvas, 2);
ImSpiel.Picture.Bitmap := Bmp;