7
votes

Ne peut pas supprimer les objets en utilisant trois.js

J'utilise trois.js pour faire un avion et mettre des boîtes dessus J'ai besoin d'enlever toutes les cases parfois. Donc, j'essaie de le faire avec le code suivant: xxx

/ Ceci tue chaque objet qui n'est pas l'avion ni la caméra; -) /

Il supprime certaines cases, mais pas toutes = ( Comment puis-je supprimer toutes les cases? Salutations, Josà ©


4 commentaires

Vous ne devez pas appeler votre objet var. C'est un mot-clé réservé pour la définition réelle de l'objet.


L'objet devrait être bien, l'objet est réservé (avec capital o)


ce n'est pas le problème ... = (. @ ama2 a raison


Indépendamment, @Flavorscape est juste en ce sens que vous ne devriez pas laisser la sensibilité casse au hasard. Nommez-vous simplement quelque chose d'autre quand même .


3 Réponses :


2
votes

Vous devez utiliser! == au lieu de! = (c'est un peu plus rapide). Avez-vous essayé de passer à travers votre boucle et de vérifier les enfants de la scène après cela? Peut-être que vous avez ajouté des boîtes à l'avion comme enfants qui ne seront pas supprimés par cette boucle.


1 commentaires

Bonne idée. Ce n'était pas le problème, mais merci de toute façon pour l'idée de M. @sebastian Sachtleben. Les salutations



22
votes

Vous devez revenir à l'avant, pas avant de revenir, lors de la suppression des objets de tableau comme celui-ci.

var obj, i;
for ( i = scene.children.length - 1; i >= 0 ; i -- ) {
    obj = scene.children[ i ];
    if ( obj !== plane && obj !== camera) {
        scene.remove(obj);
    }
}


1 commentaires

Tu l'as eu! Merci @crazycatz !!! = D = d = d = d = d = d = d



3
votes

@CRAZYCATZ La réponse est correcte, bien sûr, mais nous sommes maintenant en 2016 et au lieu de l'itération manuelle, nous ne pouvons qu'appeler .slice () code> et itérer sur la copie de tableau:

scene.children.slice().forEach(function(obj) { scene.remove(obj); })


1 commentaires

HM, mais comment supprimer un enfant exact? Pour certaines raisons, cela ne fonctionne pas pour moi scène.children [2] .children.foreach (i => scène.remove (i)) et cela ne fonctionne pas trop scène.Retirer (Scène.getObjectbyName ("Earth_marker"))