функция тика не работает в рамке 0.8.2 - PullRequest
0 голосов
/ 23 мая 2019

Я пытался использовать функцию тика, как описано в приведенной ниже ссылке https://github.com/aframevr/aframe/blob/master/docs/introduction/best-practices.md, но она не сработала

AFRAME.registerComponent('foo', {
  tick: function () {
    var el = this.el;
    var rotationTmp = this.rotationTmp = this.rotationTmp || {x: 0, y: 0, z: 0};
    var rotation = el.getAttribute('rotation');
    rotationTmp.x = rotation.x + 0.1;
    rotationTmp.y = rotation.y;
    rotationTmp.z = rotation.z;
    el.setAttribute('rotation', rotationTmp);
  }
});

Ожидаемый результат, объект должен вращаться вокруг x фактического результата, ничего не происходит ..

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Я надеюсь, что все в порядке, если я немного уточнить ответ Кевина.

Но, прежде всего, код работает. Оба в рамке 0.9.2 и 0.8.2 . Проблема может быть связана с

  • скрипт ставится после загрузки сцены
  • компонент, не привязанный к объекту:

ЯШ:

AFRAME.registerComponent('foo', {
   // component body
})

HTML:

<a-entity foo></a-entity>

Что касается ответа Кевинса - может быть хорошей идеей внести изменения в функцию tick со ссылкой на базовый объект THREE.js.

Если вы хотите повернуть коробку, нет необходимости добавлять всю эту логику:
1) создать переменную tmp
2) получить объект вращения
3) установить переменную tmp
4) установить вращение объекта

Когда у вас есть функция, которая выполняется в каждом цикле рендеринга (tick), вы хотите минимизировать то, что там происходит. Таким образом, Кевин напрямую обращается к объекту THREE.js и меняет вращение:

tick: function() {
   el.object3D.rotation.x += 0.1 * Math.PI / 180 // three uses radians
}

Проверьте это в этой скрипке .

0 голосов
/ 23 мая 2019

Вы можете просто сделать el.object3D.rotation.x += 0.1

...