Verhindern Sie Zusammenstoß-oder Schnittpunkt der canvas-Objekte
Ich bin Zeichnung n Rechtecke auf eine Leinwand. Die Rechtecke sind ziehbar und skalierbar.
Ich möchte verhindern, dass Sie überlappen oder schneiden. Der beste Fall ist, wenn Sie nur snap auf einander.
Ich herausgefunden zu überprüfen, um die Kreuzung. In meinem Beispiel habe ich die Deckkraft von sich berührenden Objekten zu 0,1.
Zufällig in meinem Versuch, dieses problem zu lösen, meine Objekte nicht freigegeben, wenn Sie sich berühren, zu einem anderen Objekt. Sehen http://jsfiddle.net/gcollect/jZw7P/
Es ist, weil der Linie 91, wo der alert wird nicht ausgeführt. alert(math.abs(distx));
Eigentlich eine Art von Lösung, aber auf jeden Fall keine elegante.
Irgendwelche Ideen?
- Hi. Alert wird nicht ausgeführt, weil die math-Funktion ist case sensitive. Bitte ersetzen Sie alert(math.abs(distx)); mit alert(Math.abs(distx)); " M " in Großbuchstaben...
Du musst angemeldet sein, um einen Kommentar abzugeben.
diese Lösungen sind ziemlich gut, aber nicht von Ihnen arbeiten mit gedrehten Objekten.
Ich kam mit dieser. Es ist zu verhindern Schnittmenge von Objekten..Auch gedreht.
Ich habe diese Geige. Überprüfen Sie es heraus.
[Fiddle]
(http://jsfiddle.net/m0jjc23v/9)Erklärung:
Problemumgehung ist, dass Sie sparen müssen, in der letzten nicht-intersectiong top & Links-position, während sich bewegendes Objekt. Wenn der Objekt sich kreuzenden oder isContained mit einem anderen Objekt, verwenden Sie einfach die zuvor gespeicherten oberen & Links-position und positionieren Objekt. Es gibt eine Menge von Verbesserungen möglich. Fühlen Sie sich frei, um diesen code zu verwenden und Verbesserungen.
Code:
Diese basiert auf der gco Antwort, aktualisiert, um die Arbeit mit FabricJS 1.5.0, mit den folgenden Verbesserungen:
JS Fiddle: https://jsfiddle.net/aphillips8/31qbr0vn/1/
Für diejenigen, die immer noch daran interessiert, die Lösung: ich löste es hier: https://stackoverflow.com/a/22649022/3207478 Siehe jsfiddle: http://jsfiddle.net/gcollect/FD53A/
Arbeiten mit
Habe ich es herausgefunden, wie um zu verhindern, dass die Kollision auf der x-Achse. Durch das hinzufügen der folgenden Zeilen:
Sehen JSFiddle.
Eigentlich ist es ziemlich kühl und die Objekte rasten auf einander auf der x-Achse. Störenfried ist jetzt die y-Achse. Ein Ansatz von oben oder unten bewegen Sie das Objekt an den linken oder rechten Rand... Wird die Arbeit an diesem Thema.
Habe ich schon vor einem ähnlichen problem und ich + die Letzte Geige, die hier von @kangax. Könnte man auch mit dieser Art von Mechanismus zu tun, die Kollisionserkennung für Pfade, die sich, wenn man einen Pfad Kollision-Erkennung-Algorithmus, wie die polygon-Schnittpunkt-code finden Sie hier: http://www.kevlindev.com/geometry/2D/intersections/index.htm.
Aber was ich nicht mag, über das 'sticky' - Lösung ist, dass mir das Objekt sollte eigentlich die Folie entlang der Oberfläche auf, die für meine Anwendung stattdessen zwingen Sie den Benutzer zu 'deblockieren' das Objekt. Für diese Art von Effekt, erkannte ich, dass ein 2D-Physik-engine würde wahrscheinlich machen einen tollen job bei der Aktivierung dieser Art von Funktionalität, und einige Beispiel-Verwendungen von http://brm.io/matter-js/ demonstrieren Lösung des Problems und die Positionierung und rotation sollte sicherlich in der Lage sein, um anzeigen in fabric.js. Wenn jedoch festen rotation erforderlich ist, wie es aussieht, ist die Wahrscheinlichkeit des Erfolgs reduziert werden würde.