Dein Code:
Code:
[b]if[/b] (p^.x > Image2.Left)
[b]and[/b] (p^.x < Image2.Left + Image2.Width)
[b]and[/b] (p^.y < Image2.Top)
Das ist wohl die eigentliche Kollisionsabfrage. Nun, wenn du abfragst, ob x zwischen Left und Left + Width liegt, musst du auch abfragen, ob y zwischen Top und Top + Height liegt. Weil so wird auch ein Schuss ein Treffer sein, der unterhalb des Zielobjekts liegt.
Setzt du bHit nach der Abfrage auch wieder auf false?
Und musst du beim Löschen der Schüsse nicht zum einen den Schuss selbst löschen (machst du ja mit Dispose()), als auch den Eintrag in der TList (TList.Delete())? Steht auch in dem anderen Thread drin, aber im hier geposteten Code nicht...
Mir ist außerdem folgende Zeile unklar:
Code:
[b]if[/b] (penemy^.y > Width) [b]or[/b] (DeleteAll) [b]then[/b]
Warum soll y größer als Width sein?