【问题标题】:How to listen to changes in the rotation of the camera in A-Frame?如何在 A-Frame 中监听相机旋转的变化?
【发布时间】:2018-07-03 04:48:06
【问题描述】:

有没有办法在当前视角上添加监听器?

换句话说,我想在用户每次看他身后时触发一个函数。

最快的方法似乎是让侦听器检查当前的头部旋转并信任在一定度数范围内触发该功能

【问题讨论】:

    标签: aframe


    【解决方案1】:

    编辑

    componentchange 事件被限制。并且不通过事件系统进行频繁更新的性能更高。在 VR 中,摄像机的旋转总是在每一帧都发生变化,因此无需考虑摄像机是否发生了变化。所以我们用组件刻度读取每一帧的旋转。

    AFRAME.registerComponent('rotation-reader', {
        tick: function () {
            var rotation = this.el.getAttribute('rotation');
            if (rotation.y < 180) {
                // ...
            }
        }
      });
    
    // <a-camera rotation-reader>
    

    原创

    https://aframe.io/docs/0.2.0/core/entity.html#listening-for-component-changes

    您可以使用componentchanged 事件来监听轮换的变化:

    document.querySelector('[camera]').addEventListener('componentchanged', function (evt) {
      if (evt.name !== 'rotation') { return; }
      if (evt.newData.y < 180) { // ... }
    });
    

    或者作为一个组件更好(这会在旋转到一定量时触发一个事件):

    AFRAME.registerComponent('trigger-on-look-behind', {
      schema: {type: 'string'},
    
      init: function () {
        var eventName = this.data;
        this.el.addEventListener('componentchanged', function (evt) {
          if (evt.name !== 'rotation') { return; }
          if (evt.newData.y < 180) {
            this.emit(eventName);
          }
        });
      }
    });
    

    然后:

    <a-camera trigger-on-look-behind="looked-behind"></a-camera>
    

    【讨论】:

    • 不是说registerComponent()函数需要一个对象作为第二个参数,而不是一个函数吗?我的意思是AFRAME.registerComponent('trigger-on-look-behind', { 而不是AFRAME.registerComponent('trigger-on-look-behind', function () {
    猜你喜欢
    • 1970-01-01
    • 2017-12-24
    • 2019-12-02
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    • 2019-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多