Ich benutze Three.JS, um ein Flugzeug zu bauen und einige Kisten darüber zu legen Ich muss manchmal alle Boxen entfernen. Also versuche ich es mit dem folgenden Code zu tun:
%Vor%/ Damit wird jedes Objekt getötet, das nicht das Flugzeug oder die Kamera ist; -) /
Es löscht einige Boxen, aber nicht alle = Wie kann ich alle Boxen löschen? Grüße, José
Wenn Sie Array-Objekte wie diese entfernen, müssen Sie zurück nach vorne gehen, nicht von vorne nach hinten.
%Vor%Was passiert ist, wenn man einen Knoten entfernt, alle nach dem Verschieben. Nehmen wir an, Sie entfernen scene.children [0]: children [1] wird zur neuen 0, 2 wird zu 1 usw. Wenn Sie von 0 zu array.length gehen, ist die for-Schleife bereits aktiviert und überspringt für jeden gelöschten einen Knoten.
Als zusätzliches Plus sollte das etwas schneller gehen, besonders wenn Sie viele Objekte haben, da scene.children.length nur einmal statt jeder Schleife erhalten wird.
@Crazycatz Antwort ist natürlich korrekt, aber jetzt sind wir in 2016 und anstelle der manuellen Iteration können wir einfach .slice()
aufrufen und über Array kopieren:
oder ohne ES6-Goodies:
%Vor%Sie sollten! == statt! = verwenden (es ist ein bisschen schneller). Hast du versucht, deine Schleife durchzugehen und danach Szenenkinder zu überprüfen? Vielleicht haben Sie dem Flugzeug einige Kästchen hinzugefügt, die nicht von dieser Schleife gelöscht werden.
Tags und Links javascript three.js 3d