Zitat:
Erzeugst/zerstörst Du den/die Timer immer noch dynamisch? Das würde ich so nicht machen, da dabei ja auch Zeit verbraten wird. Besser wäre es IMO, den bzw. die Timer einmalig anzulegen und gff. zu disablen. Außerdem könnte man das schön
OOP lösen, indem die ganzen Spielobjekte selbstständig agieren und dafür jeweils einen eigenen Timer erzeugen. Aber das ist vielleicht noch etwas zu hoch gegriffen.
Ja, hatte ich
Hab jetzt so gemacht, das jedes Spielobjekt seinen eigenen Timer hat.
Es sieht nun folgender maßen aus:
Delphi-Quellcode:
if targetChanged then
begin
if (listTowerTimer.IndexOfObject(tw.timer) = -1) then
setTimer(tw)
else
tw.timer.Enabled := true;
end;
Delphi-Quellcode:
procedure TFightManager.setTimer(tower: TTower);
var timer: TCKMultimediaTimer;
a: integer;
begin
timer := (tower as TFightTower).timer;
timer.Interval := Round((tower as TFightTower).Speed * 1000);
timer.OnTimer := TimerProc;
timer.Enabled := true;
listTowerTimer.AddObject(IntToStr(listTower.IndexOf(tower)),timer);
end;
und in der TimerProcedur steht
(Sender as TCKMultimediaTimer).Enabled := false;
Aber geholten hats trotzdem nicht^^.
Ich glaube dort ist ein Denkfehler von mir drin, ich glaub ich weiß auch schon wo.
Sobald ein Gegner in die Reichweite eines Turmes läuft, dauert es erstmal die Intervall bis der Turm schießt. Doch es soll eigentlich so sein, das er direkt schießt und dann die Intervall abwartet und dann wieder etc.
Müsste ja dann funktionieren, indem ich die intervall zuerst auf 1 setzt und in der Timer Procedure auf den normalen Wert.