Entwickler-Ecke

Multimedia / Grafik - Eigene Kollisionsabfrage / Inhaltsprüfung bei 2D Flächen


alexschultze - Fr 21.02.03 18:15
Titel: Eigene Kollisionsabfrage / Inhaltsprüfung bei 2D Flächen
Hi,

ich habe hier ein kleines Problem.
Es geht um eine Kollisionsabfrage und die Prüfung, ob sich ein Objekt in einem bestimmten Bereich befindet.

Bevorzugen würde ich es das selber zu programmieren. Geht hauptsächlich um die Berechnung. Auf einer Image sollen ein paar kleine Schifflein rumhupfen, und man soll die halt selektieren können, und da ist die Frage welche der Schiffe in einem gezogenen Bereich sind (wie bei Spielen eben) und markiert diese.

Weiterhin geht es darum das die Schiffe einen speziellen Bereich sichtbar machen sollen (um das Schiff herum).

Wie berechne ich sowas?
Oder würdet ihr mir für sowas direkt DelphiX oder was ähnliches empfehlen?

Alex


maximus - Mo 24.02.03 15:57

Hallo.

Ich nehme ann jedes deiner schiffe hat schon ein Rect: Mit der funktion IntersectRect(rect) prüfst du für jedes schiff ob 'true' bei raus kommt und markierst es dann!

mfg mx


alexschultze - Mo 24.02.03 16:13

das klingt nach Delphi X.
Noch benutze ich das ja gar nicht :)


Raphael O. - Mo 24.02.03 16:18

wenn du es ganz elemetar haben willst:
onmousedown: Koords merken
onmouseup: -koordsmerken
-schauen ob dein Objekt (teilweise) mit in dem Rechteck liegt
(wenn das nicht klar ist, dann noch mal fragen...)


maximus - Di 25.02.03 11:13

Zitat:
das klingt nach Delphi X.
Noch benutze ich das ja gar nicht

...hä! Das hat absolut nichts mit delphiX zu tun. Irgendwie kannst du wohl ein rect (rectangle = rechteck) für dein schiff erstellen, wenn du keins hast! IntersectRect ist ein standart delphi befehl!

muku.


Indeterminatus - So 09.03.03 01:08

Tja, und sollte das noch nicht ausreichen, dann kannst du das ganze system noch etwas optimieren ...

Mit einer einfachen Entfernungs-abfrage (für die es übrigens auch ein verdammt schnelles Annäherungsverfahren gibt das ohne Wurzel-Operation auskommt) überprüfst du zuerst ob es sich überhaupt "auszahlt" eine genauere Überprüfung vorzunehmen ... ab einer bestimmten Entfernung kannst Du ja dann auf überschneidende Rechtecke überprüfen ... wenn Dir das noch zu ungenau ist dann musst Du halt auf bitmask-vergleiche zurückgreifen (d.h. pixelweise Überprüfung der Objekte ... damit kannst Du verhindern dass 2 Schiffe (zum Beispiel!) kollidieren weil sich zwar ihre Rechtecke überschneiden, die Schiffe aber keine Rechtecks-form haben und sich eigentlich gar nicht berühren würden ...)

Hoffe ich hab damit eine kleine Anregung gegeben, "wie man's auch machen kann" :wink:

_______________________________________
Indeterminatus

---=si tacuisses, philosophus mansisses=---