2012-06-12 4 views
2

Я использую ThreeJS, чтобы создать взаимодействие, в котором люди могут щелкнуть кубы. Однако эти кубы ведут себя по-разному при нажатии (разные цветовые анимации, чтобы идея была простой).Есть ли способ расширить объект ThreeJS?

Моя идея состояла в том, чтобы создать классы расширения объекта THREE.Mesh и добавить мои пользовательские функции и атрибуты. Это поможет изолировать различные типы поведения кубов и предоставить более чистый код.

Я пробовал использовать John Resigs' function to extend classes, но, похоже, он работает только для классов, которые в конечном счете расширяют класс класса.

Есть ли способ сделать это?

+0

Вы пробовали это делать обычный способ, например: 'THREE.Mesh.prototype.your_method = function {}'? – Hassan

+0

@ Hassan Я делал это, но потом по коду становилось все более запутанным. – PCoelho

ответ

3

Существует несколько способов создания систем на основе классов в Javascript. «Класс» Джона Ресига - отличный, но это не тот тип наследования, который использует Three.js.

Обратите внимание на the Cube class file линию:

THREE.Geometry.call(this); 

Javascript не обеспечивает встроенную модель для наследования классов, так что если вы используете библиотеку (например, Резиг), что печет наследство в классе строительство, вы должны вызвать метод супер явно.

Ваш класс наследует от CubeGeometry, если в вашем классе, вы звоните:

THREE.CubeGeometry.call(this); 

Вы также, вероятно, хотите установить CubeGeometry прототипом:

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

Хорошо, мне удалось заставить его работать, используя вашу идею. Можем ли мы сказать, что функция вызова ведет себя как «супер» на других языках? – PCoelho

+0

@PCoelho 'call' - это просто способ выполнить функцию из заданного контекста – jbabey

+0

нет встроенного« супер »в JS. «THREE.Geometry» - это супер метод, и call() вызывает его и вводит локальную область «это». Материал на основе классов кажется немного странным в JS, потому что он не похож на другие языки, но делает JS гораздо более гибким, чем другие, по сути, языки на основе классов. – BishopZ

Смежные вопросы