我试图仅调整对象的Y坐标,同时保持X和Z坐标相同。我工作的唯一方法是获取对象的位置并组成一个新的部分修改位置。它不漂亮,似乎效率低下。看起来这可能是因为position is a single-property component,所以也许这是不可能的。
这是我目前的解决方案:
https://glitch.com/edit/#!/aframe-position-example
的index.html:
<html>
<head>
<script src="https://aframe.io/releases/0.6.0/aframe.min.js"></script>
</head>
<body>
<a-scene>
<a-camera id="camera"></a-camera>
</a-scene>
<script src="index.js"></script>
</body>
</html>
index.js:
const camera = document.querySelector( '#camera' )
console.log( camera.getAttribute( 'position' ) )
// {x: 0, y: 1.6, z: 0}
// overwrites original position, as expected
camera.setAttribute( 'position', { x: 0, y: 0, z: 5 } )
console.log( camera.getAttribute( 'position' ) )
// {x: 0, y: 0, z: 5}
// overwrites original position (including z, defaults to 0), maybe not expected
camera.setAttribute( 'position', { x: 5, y: 5 } )
console.log( camera.getAttribute( 'position' ) )
// {x: 5, y: 5, z: 0}
// overwrites original position (x and z become 0), maybe not expected
camera.setAttribute( 'position', 'y', 10 )
console.log( camera.getAttribute( 'position' ) )
// {x: 0, y: 10, z: 0}
// how to change some position variables and keep the other ones the same
let oldPos = camera.getAttribute('position')
let newPos = { x: 4, y: oldPos.y, z: oldPos.z }
camera.setAttribute( 'position', newPos )
console.log( camera.getAttribute( 'position' ) )
// {x: 4, y: 10, z: 0}
答案 0 :(得分:1)
你可以:
position
变量,并仅更改所需的部分:let pos = this.el.getAttribute('position');
pos.x += velocity;
this.el.setAttribute('position',pos);
使用Rainer Witmann使用Object.Assign()
来减少临时性的想法:
this.el.setAttribute('position', Object.assign({}, this.el.getAttribute('position'), {x: newX}));
似乎更短,但我喜欢将整个位置作为临时变量:
住在这里:https://jsfiddle.net/gftruj/dqyszzz5/4/
直接与position
组件混淆,更改数据并调用update()
功能:
this.el.components.position.data.z-=2;
this.el.components.position.update();
这很有趣,但我认为在创建商业/专业项目时这是一个糟糕的想法,因为每个框架都会出现。
this.el.object3D.position.x += velocity;
getAttribute()
,因为职位组成部分不会发生变化。在你的小故障中使用第一个选项,但你不需要单独使用位置对象属性:setAttribute('position',{x:pos.x,y:pos.y,z:pos.Z});
,你可以简单地使用整个对象:setAttribute('position',pos);
答案 1 :(得分:1)
您也可以使用Object.assign
。像这样:
camera.setAttribute('position', Object.assign({}, camera.getAttribute('position'), {x: 5})