Einzelnen Beitrag anzeigen

Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#3

AW: Problem beim Bereich prüfen.

  Alt 20. Aug 2011, 00:45
Du kannst natürlich mathematisch prüfen:
getroffen := ((Bullet.Right >= Enemy.Left) and (Bullet.Right <= Enemy.Right)) or ((Bullet.Left <= Enemy.Right) and (Bullet.Left >= Enemy.Left)) or ((Bullet.Left <= Enemy.Left) and (Bullet.Right >= Enemy.Right)); (Die letzte Bedingung ist unnütz, wenn die Projektile stets schmaler sind als die Gegner.)
Okay, ist eher logisch geprüft, aber mathematisch motiviert. Nennt sich "AABB"-Test (Axis-Aligned-Bounding-Box Test).

Allerdings hast du dann noch immer ein Problem, wenn beide beteiligten kleiner als die Schrittweite sind (also in deinem Fall unter 15 Pixel), da dann Überspringen noch geht. Um das auch zu behandeln, bleibt wirklich nur noch der Ansatz mit linearer Algebra (Schnittpunktberechnung der Flugbahn des Projektils mit den Kanten des Gegners), was stahli auch nannte. Bei langsamen Projektilen - klingt bei dir so - sollte man zudem nicht auf Geradenschnitt, sondern bildweise auf Streckenschnitt prüfen. (Also normalisierten Richtungsvektor mit der Geschwindigkeit skalieren, und nach dessen Parameter auflösen. Ist der zwischen 0 und 1 gabs nen Schnitt im aktuellen Frame.)
Alles aber unnötig, wenn eben mindestens ein beteiligtes Kollisionselement in allen relevanten Richtungen größer als die Schrittweite ist, dann das simple AABB. (Vorausgesetzt, eine Begrenzung deiner Gegner anhand ihrer linken und rechten Grenzen ist ausreichend. Bei größeren/komplexeren kann das auch schon wieder zu grob sein, das ist Ermessenssache. Allerdings kommt man dann mit Bitmaps eh nicht mehr wirklich gut weiter, dann müsste alles in vektorieller Form vorliegen.)

Viel wichtiger: Wilkommen in der DP!
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat