Danke schon. das sieht ja so kompliziert aus, das müßte gehen. Aaaaber...
So will ich jetzt einen Schuß mit deinem Code abfeuern, aber das klappt noch nicht:
Code:
[b]procedure[/b] TForm1.FormKeyDown(Sender: TObject; [b]var[/b] Key: Word;
Shift: TShiftState);
[b]var[/b]
p: PPoint;
[b]begin[/b]
[b]case[/b] Key [b]of[/b]
VK_LEFT: lblGun.Left := lblGun.Left - 5;
VK_RIGHT: lblGun.Left := lblGun.Left + 5;
VK_SPACE:
[b]begin[/b]
Fire;
Timer1.Enabled := TRUE;
[b]end[/b];
[b]end[/b];
[b]end[/b];
In der letzten Zeile bekomme ich eine AccessViolation bveim Debuggen.
Zitat:
Code:
[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 <-- HIER[/i][/color]
[b]end[/b];
Aber wie ist das, wenn ich so:
Zitat:
Code:
[b]procedure[/b] TForm1.Shoot(x, y: DWORD);
[b]var[/b]
Shot: TShot;
[b]begin[/b]
Shot.x := x;
Shot.y := y;
Form1.Refresh;
Form1.Canvas.Draw(Shot.x, Shot.y, bullet);
[b]end[/b];
schiesse, dann werden ja jedes mal alle Schüsse gelöscht.