使用位置的动画组件“至”属性的setAttribute无法设置

时间:2019-06-13 02:21:34

标签: javascript aframe

我正在使用A-Frame(webVR)制作多全景浏览器。世界上有几个3d按钮(每个按钮位置都有全景映射的球体)。单击一个按钮,然后动画组件将摄影机从其当前位置移动到按钮位置。一个包含侦听器(用于按钮上的单击事件)的自定义组件,使用setAttribute设置相机上动画组件的“ to”和“ from”属性。发射命令触发动画。不幸的是,它失败了,我可以看到'from'属性设置不正确(它设置为与'to'相同)。它不会引发错误,但是即使在显式设置中,我也可以在控制台中看到from不会被设置。

我已经在以前的版本中使用过此功能。您可以在此处查看和测试: https://glitch.com/~camera-jumper

在此版本中,我没有设置from属性,但它仍然可以正常工作,大概是因为它将默认值作为以前的值。

然后我建立了一些其他功能,现在它失败了。您可以在此处查看当前版本: https://glitch.com/~panojumper

AFRAME.registerComponent('buttoncontrol', { 
    schema: {
        pano:{type:'string',default: 'pSphere1'} 
    },  
    init: function(){   
        var el = this.el;       
        var cam = document.querySelector('#camera'); 
        var panoManEntity = document.querySelector('#panoMan'); 
        var panoName = this.data.pano;
        console.log(cam.getAttribute('animation__jump', 'to'));
        this.el.addEventListener('click', function(evt){

            // Animate the camera moving to the button position
            var btnpos = el.getAttribute('position'); 
            var cam = document.querySelector('#camera');
            var campos = cam.getAttribute('position');              

            cam.setAttribute('animation__jump','to', {x: btnpos.x, y: 
              btnpos.y, z: btnpos.z });             
            cam.setAttribute('animation__jump','from', {x: campos.x, y: 
              campos.y, z: campos.z });     
            cam.emit('camjump');
        }); 
    }
});

我希望'from'的setAttribute是我将其设置为的属性,但是它与'to'值相同。

2 个答案:

答案 0 :(得分:0)

设置from属性似乎有效,您可以通过修改第一个故障来验证它。添加from属性,它仍然可以正常工作:

var campos = cam.getAttribute('position')
// Animate the camera moving to the button position
cam.setAttribute('animation__jump','to', {x: btnpos.x, y: btnpos.y, z: btnpos.z });
cam.setAttribute('animation__jump','from', {x: campos.x, y: campos.y, z: campos.z });   

提琴here


如果您在<head>中或至少在<a-scene>之前注册了自定义组件,则其他故障也将起作用。 docs中还有一条注释。

提琴here

答案 1 :(得分:0)

您钉了它!自定义组件一定不能在场景中,而应该在头部。我将其移动是因为我的资产标签位于场景标签之前,这引发了错误,因此我将场景标签向北移动了太远。将场景标签移到registerComponents下方即可解决。 所有这些都在文档中,但是我是菜鸟。谢谢你的帮助!