So erkennen Sie eine Kollision zwischen einem Sprite und einer vom Benutzer generierten Form.
Zum Beispiel. Auf dem Bildschirm befinden sich einige Objekte. Der Benutzer nimmt seinen Finger und zeichnet eine Kreisform um ein Objekt (Die Auswahlregel lautet, einen Kreis um das Sprite zu malen, die Malformen können jedoch unterschiedlich sein). Ich muss erkennen, welches Objekt ausgewählt wurde, welches genau wie:
collision-detection
Huwell
quelle
quelle
Antworten:
Wenn die Form hauptsächlich mit Liniensegmenten des Benutzers (oder Bezier-Kurven mit Kontrollpunkten) gezeichnet wird, können Sie einen ziemlich weit verbreiteten Algorithmus implementieren, der als Separating-Axis-Theorem bekannt ist . Einfach ausgedrückt: Wenn es eine Achse (Einheitsvektor, der eine Richtung darstellt) gibt, auf der sich die Formen nicht überlappen (ihre projizierten Werte führen nicht zu einem positiven Unterschied), überlappen sich die Objekte nicht. Ich habe dies in der Vergangenheit verwendet und es hat wie ein Zauber funktioniert.
quelle
Wenn die Form wie in Crayon Physics von Hand gezeichnet ist , können Sie eine Reihe von geraden Linien halten und Kollisionen mit jeder von ihnen überprüfen. Trotz gerader Linien können Sie Bezier-Kurven oder ähnliches verwenden.
quelle
Ansätze hängen davon ab, welche Datenstrukturen Sie auswählen, ob es sich um Bitmaps oder Vektoren handelt.
Der erste Ansatz kann beliebig komplexe Formen verarbeiten, ist einfach zu implementieren, benötigt jedoch mehr Speicher. Tatsächlich können Sie den Speicheraufwand durch Komprimierung reduzieren und durch Verwendung von hierarchischen Datenstrukturen (Oktrees) beschleunigen ...
Der zweite Ansatz ist nicht so einfach zu implementieren, verbraucht jedoch mehr Rechenleistung.
In jedem Fall messen, ob es darauf ankommt. Ich würde versuchen, zuerst eine zu machen, weil es einfacher zu implementieren ist. Viel Glück. :) :)
quelle