【问题标题】:Aframe componentchanged not working in v1Aframe 组件更改在 v1 中不起作用
【发布时间】:2020-04-07 02:18:04
【问题描述】:

我正在使用 SocketIO 和 AFrame 构建多人游戏体验。这个剪辑在 Aframe 0.5 中运行得非常好,但是当我切换到 v1 时,它突然停止工作。 “componentchanged”侦听器根本不会触发。 “找到我自己”总是被打印出来,所以它不像我自己是空的。

socket.on('connect',function(){

  console.log('connected to server');
  let myself=document.getElementById('user-cam')
  if(myself!=null){
    console.log(name)
    console.log("FOUND MYSELF")
    const player={name:name,translation:[0,0,0],rotation:[0,0,0]};
    socket.emit('player connect',player);
    isConnected=true;
    myself.addEventListener('componentchanged', function (evt) {
      console.log("Component Changed");
      console.log(evt.detail.newData);
      if(evt.detail.name==='position'){

        player.translation=[evt.detail.newData.x,evt.detail.newData.y,evt.detail.newData.z];
        socket.emit("PlayerMove",player);
      }
      if (evt.detail.name==='rotation'){
        player.rotation= [evt.detail.newData.x,evt.detail.newData.y,evt.detail.newData.z];
        socket.emit("PlayerRotate",player);
      }
    });
  }
  else{
    console.log("NOT FOUND");
  }

});

【问题讨论】:

  • 我为每个版本 0.5 和之后测试了这段代码,它在 0.5 和 0.6 上都可以正常工作,对于 0.7 和 0.8 有错误(意料之中,因为 evt.detail 只包含从 0.7 开始更改)。从 0.9 开始,它永远不会触发(“组件已更改”不记录)

标签: javascript dom-events aframe webvr


【解决方案1】:
如果在 AFRAME 0.9 或更高版本中使用 el.object3D.position/rotation/scale 更改了位置/旋转/缩放属性,

'componentchanged' 不再适用于它们。要跟踪它们的变化,您需要使用 AFRAME.registercomponent,并在 tick 或 tock 函数中检查 element.object3D.position/rotation/scale。更多信息here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-08
    • 2021-01-11
    • 2019-10-09
    • 2011-04-04
    • 2012-12-10
    • 2018-03-23
    • 1970-01-01
    • 2018-08-27
    相关资源
    最近更新 更多