Thema: Delphi Schießen meine ich

Einzelnen Beitrag anzeigen

jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2
  Alt 15. Jun 2002, 09:05
Du musst, beim Abfeuern dir die X und Y Koordinaten merken. Danach sind diese dein Ausgangspunkt. Ein Array würde ich dir da vorerst einmal nicht empfehlen, da man nicht weiß, wieviel Schuss abgefeuert werden, und wenn ein Schuss "ausgelebt" hat, dann musst du bei einem Array alle nachfolgenden Schüsse um ein Element nach vorne schieben. Mit einer dynamischen Liste wie TList, ist das kein Problem.

Code:
[color=#000080][i]// AllShoots: TList;[/i][/color]

[b]procedure[/b] TForm1.Fire; [color=#000080][i]// Schuss abgeben[/i][/color]
[b]var[/b]
  p: PPoint;
[b]begin[/b]
  New(p);
  p^.x := lblGun.Left + (lblGun.Width [b]div[/b] 2);
  p^.y := lblGun.Top;
  AllShoots.Add(p); [color=#000080][i]// neuen Schuss zu Liste hinzufügen[/i][/color]
[b]end[/b];

[b]procedure[/b] TForm1.DeleteDeadShoots(DeleteAll: Boolean);
[b]var[/b]
  p: PPoint;
  ii: Integer;
[b]begin[/b]
  [b]for[/b] ii := AllShoots.Count -1 [b]downto[/b] 0 [b]do[/b]
  [b]begin[/b]
    p := PPoint(AllShoots.Items[ii]);
    [b]if[/b] (p^.y < 0) [b]or[/b] (DeleteAll) [b]then[/b]
    [b]begin[/b]
       AllShoots.Delete(i); [color=#000080][i]// deswegen die Schleife rückwärts durchlaufen[/i][/color]
       Dispose(p);
    [b]end[/b];
  [b]end[/b];
[b]end[/b];

[b]procedure[/b] TForm1.Timer1Timer(Sender: TObject);
[b]var[/b]
  p: PPoint;
  ii: Integer;
[b]begin[/b]
  [b]for[/b] ii := 0 [b]to[/b] AllShoots.Count -1 [b]do[/b]
  [b]begin[/b]
    p := PPoint(AllShoots.Items[ii]);
    Shoot(p^.x, p^.y);
    Dec(p^.y, 5);
  [b]end[/b];
  DeleteDeadShoots(False);
[b]end[/b];

[b]procedure[/b] TForm1.FormDestroy...
[b]begin[/b]
  DeleteDeadShoots(True); [color=#000080][i]// speicher freigeben[/i][/color]
[b]end[/b];
by Daniel B; ich habe aus den Variablen i, ein ii gemacht, da sonst die Formatierung nicht funktioniert hätte.
  Mit Zitat antworten Zitat