Thema: Delphi OnIdle-Timer

Einzelnen Beitrag anzeigen

Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: OnIdle-Timer

  Alt 13. Sep 2006, 16:37
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;
  Mit Zitat antworten Zitat