¿Hay alguna manera de extender un objeto ThreeJS?

Estoy usando ThreeJS para crear una interacción en la que las personas puedan hacer clic en los cubos. Sin embargo, estos cubos se comportan de manera diferente cuando se les hace clic (animaciones de diferentes colores, para simplificar la idea).

Mi idea era crear clases de extensión del objeto THREE.Mesh y agregar mis funciones y atributos personalizados. Esto ayudaría a aislar los diferentes comportamientos de los cubos y proporcionaría un código más limpio.

Intenté usar La función de John Resigs para extender clases, pero parece funcionar solo para las clases que en última instancia amplían su clase "Clase".

¿Hay una manera de hacer esto?

preguntado el 12 de junio de 12 a las 15:06

¿Has intentado hacerlo de la manera habitual, como: THREE.Mesh.prototype.your_method = function { }? -

@Hassan, estaba haciendo eso, pero luego, por código, se estaba volviendo confuso. -

1 Respuestas

Hay varias formas de hacer sistemas basados ​​en clases en Javascript. La "Clase" de John Resig es excelente, pero no es el tipo de herencia que usa Three.js.

Aviso en el archivo de clase Cube la línea:

THREE.Geometry.call( this );

Javascript no proporciona un modelo integrado para la herencia de clases, por lo que, a menos que esté utilizando una biblioteca (como la de John Resig) que integra la herencia en la construcción de clases, debe llamar al supermétodo explícitamente.

Su clase heredaría de CubeGeometry si, dentro de su clase, llama:

THREE.CubeGeometry.call( this );

Es probable que también desee configurar CubeGeometry para que sea el prototipo:

THREE.MyCubeGeometry.prototype = new THREE.CubeGeometry();
THREE.MyCubeGeometry.prototype.constructor = THREE.MyCubeGeometry;

Respondido el 12 de junio de 12 a las 16:06

Ok, logré hacerlo funcionar usando tu idea. ¿Podemos decir que la función de llamada se comporta como el "super" en otros idiomas? - PCoelho

@PCoelho call es solo una forma de ejecutar una función desde un contexto dado: bebe

no hay un "super" incorporado en JS. "TRES.Geometría" es el supermétodo, y call() lo llama e inyecta el alcance local "esto". Las cosas basadas en clases parecen un poco extrañas en JS porque no son como otros lenguajes, pero hacen que JS sea mucho más flexible que otros lenguajes inherentemente basados ​​en clases. - ObispoZ

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.