AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Problem beim Bereich prüfen.
Thema durchsuchen
Ansicht
Themen-Optionen

Problem beim Bereich prüfen.

Ein Thema von Blackstyle94 · begonnen am 19. Aug 2011 · letzter Beitrag vom 20. Aug 2011
Antwort Antwort
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#1

AW: Problem beim Bereich prüfen.

  Alt 19. Aug 2011, 23: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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz