Javascript: Kollisionserkennung
könnte mir bitte jemand helfen zu verstehen, wie die Kollisionserkennung funktioniert in JS? Ich kann nicht mit jQuery oder gameQuery - schon mit Prototyp - also, ich bin auf der Suche nach etwas sehr einfaches. Nicht Fragen, für die komplette Lösung, nur zeigen Sie mir die richtige Richtung.
Sagen wir mal es gibt:
<div id="ball"></div>
and
<div id="someobject0"></div>
Nun der ball in Bewegung ist (andere Richtung). "Someobject"(0-X) ist schon vordefiniert und es gibt 20-60 von Ihnen nach dem Zufallsprinzip wie folgt positioniert:
#someobject {position: absolute; top: RNDpx; left: RNDpx;}
Kann ich ein array erstellen mit "someobject(X)" Positionen und test-Kollision während der "ball" bewegt sich... so Etwas wie:
for(var c=0; c<objposArray.length; c++){
........ and code to check ball's current position vs all objects one by one....
}
Aber ich denke, dies wäre ein "noob" - Lösung, und es sieht ziemlich langsam.
Gibt es was besseres?
InformationsquelleAutor der Frage jack moore | 2010-03-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das erste, was zu haben ist die eigentliche Funktion, die erkennt, ob Sie eine Kollision zwischen dem ball und dem Objekt.
Aus performance-Gründen wird es groß sein, zu implementieren, einige grobe Kollision Erkennung Technik, z.B., bounding-Rechteckeund eine genauere, wenn erforderlich, im Falle Sie haben Kollision erkannt, so dass Ihre Funktion ausgeführt wird, ein wenig schneller, aber mit genau der gleichen Schleife.
Weitere option, die helfen können, um die Leistung zu erhöhen ist zu tun, einige vor der Verarbeitung mit den Objekten, die Sie haben. Zum Beispiel können Sie brechen Sie die ganze Gegend in die Zellen wie eine generische Tabelle, und speichern Sie das entsprechende Objekt enthalten sind, die innerhalb der jeweiligen Zellen. Daher erkennen die Kollision, die Sie sind, erkennen die Zellen besetzt durch den ball, Holen Sie sich die Objekte aus den Zellen und verwenden Sie Ihre Kollision-Detektion-Funktion.
Es zu beschleunigen sogar noch mehr, die Sie umsetzen können 2d-Baumquadtree oder Der R-tree.
InformationsquelleAutor der Antwort Li0liQ
Hier eine sehr einfache bounding-Rechteck-routine. Es erwartet
a
undb
werden Objekte mitx
y
width
undheight
Eigenschaften:Sehen diese Funktion in Aktion, hier ist ein codepen gnädig gemacht, indem @MixerOID.
InformationsquelleAutor der Antwort Husky
Können Sie versuchen,jquery-Kollision. Vollständige Offenlegung: ich schrieb das und veröffentlicht es. Nicht eine Lösung finden, also schrieb ich es selbst.
Ermöglicht es Ihnen zu tun ist:
wird wieder alle "#someobject0"'s, die sich überschneiden, die mit "#Kugel".
InformationsquelleAutor der Antwort eruciform
Eine Version ohne jQuery, mit HTMLElements als Eingänge
Dies ist ein besserer Ansatz, die überprüft die tatsächliche position der Elemente, wie Sie gezeigt werden, auf den viewport, auch wenn Sie absolute, relative oder manipuliert werden, über Transformationen:
InformationsquelleAutor der Antwort Àlex Garcés
"der bcm -" Antwort, hat 0 Stimmen, zu dieser Zeit, ist eigentlich eine großartige, unterschätzte Antwort. Es nutzt der guten alten Pythagoras zu ermitteln, wenn sich die Objekte näher sind, als Ihre kombinierte umgebenden Kreise. Einfache Kollisionserkennung oft mit rechteckigen collision detection, das ist in Ordnung, wenn deine sprites sind in der Regel, gut, rechteckig. Wenn Sie sind kreisförmig (oder andernfalls weniger als rechteckig), wie ein ball, ein asteroid oder irgendeine andere Form, wo die extremen Ecken sind in der Regel transparent, können Sie finden diese effiziente routine, um die Genaueste.
Aber für Klarheit, hier ist eine voll verwirklichte version der code:
Wo die Parameter zu übergeben, in die x -, y-und width-Werte von zwei verschiedenen sprite-Objekte
InformationsquelleAutor der Antwort J Sprague
InformationsquelleAutor der Antwort Fordi
Dies ist eine leichte Lösung, die ich begegnet bin -
Den großen und kleinen Variablen sind 2 Objekte, (x-coord, y-coord, und w die Breite)
Vom hier
InformationsquelleAutor der Antwort bcm
Mozilla hat einen guten Artikel über diese, mit dem gezeigten code unten
https://developer.mozilla.org/en-US/docs/Games/Techniques/2D_collision_detection
Rechteck Kollision
Kreis Kollision
InformationsquelleAutor der Antwort B M
Dies ist eine einfache Möglichkeit, die ineffizient ist, aber es ist durchaus sinnvoll, wenn Sie brauchen nicht alles zu aufwendig oder Sie haben nicht viele Objekte.
Ansonsten gibt es viele verschiedene algorithmen, aber die meisten von Ihnen sind ziemlich Komplex zu implementieren.
Beispielsweise können Sie eine divide et impera Ansatz, in dem Sie die cluster-Objekte werden hierarchisch nach Ihrer Entfernung und geben Sie jedem cluster eine bounding-box, die enthält alle Elemente des Clusters.Dann können Sie überprüfen, welche Cluster kollidieren und vermeiden, überprüfen Paare von Objekt gehören Cluster, die nicht kollidiert sind/werden.
Sonst können Sie herausfinden, eine generische space partitioning-Algorithmus aufzuteilen in ähnlicher Weise wie die Objekte zu vermeiden, nutzlos überprüft. Diese Art von algorithmen aufgeteilt werden die Kollisionserkennung in zwei Phasen: eine grob in dem Sie sehen, welche Objekte vielleicht kollidieren und eine feine in dem Sie effektiv überprüfen, einzelne Objekte.
Zum Beispiel können Sie eine QuadTree wikipedia Training eine einfache Lösung..
Werfen Sie einen Blick auf die wikipedia Seitekann es Ihnen einige Hinweise.
InformationsquelleAutor der Antwort Jack
hittest.js; erkennen, zwei transparente png-Bild (pixel) Kollision.
Demo und download-link
HTML-Code;
Init-Funktion;
Einfache Nutzung;
InformationsquelleAutor der Antwort bugra ozden