bounty 4天后到期。这个问题的答案有资格获得+50的声誉奖励。Bilal想要引起更多的关注这个问题:我需要一种方法来设置Group()上下运动的动画,并将对象从场景中分离出来。
我的目标是制作一个直线抓握运动(拾取/放置)的动画,这里是一个codesandbox来重现我的问题:
1.创建夹爪后,它开始向下移动,直到到达乐高积木,然后停止。
const grip_pos = new Vector3(
pick_pos.x,
pick_pos.y,
pick_pos.z + 5
);
createGripper(grip_pos, this.scene);
console.log(this.scene.getObjectByName("gripper", true));
const gripper = this.scene.getObjectByName("gripper", true);
// Down
while (gripper.position.y > (pick_pos.z / 0.48)) {
gripper.position.y -= 0.1;
};
1.夹持器连接到乐高上,它拿起乐高,并移动到位置上方。
gripper.add(lego);
// if Down then Up
if (!gripper.position.y > pick_pos.z / 0.48) {
while (gripper.position.y < grip_pos) {
gripper.position.y += step;
}
if (pick_rot) {
gripper.rotateY(Math.PI / 2);
}
}
// Move to Place Position
while (gripper.position.x > place_pos.y / 0.8 + 9.2) {
gripper.position.x -= step;
}
while (gripper.position.x < place_pos.y / 0.8 + 9.2) {
gripper.position.x += step;
}
while (gripper.position.z > place_pos.x / 0.8 + 2.8) {
gripper.position.z -= step;
}
while (gripper.position.z < place_pos.x / 0.8 + 2.8) {
gripper.position.z += step;
}
1.夹持器向下移动到放置位置,它到达放置位置,然后它脱离乐高,向上移动,然后消失。
// Place Down
if (
gripper.position.x === place_pos.y &&
gripper.position.z === place_pos.x
) {
while (gripper.position.y > pick_pos.z / 0.48) {
gripper.position.y -= step;
}
}
if (place_rot) {
gripper.rotateY(Math.PI / 2);
}
this.scene.add(lego);
this.scene.remove(gripper);
this.renderer.render(this.scene, this.camera);
cancelAnimationFrame(id);
为了做到这一点,我有created my gripper,并尝试按照事先解释的那样移动它。但我看不到任何动作,而且我的浏览器卡住了,没有显示任何错误!你能指导我怎样才能实现那个直线运动吗?提前谢谢你。
请注意,由于我使用了两个坐标框架xyz
和zyx
,并进行了平移和缩放,因此在位置上进行了转换。
1条答案
按热度按时间ergxz8rk1#
解决方案是避免将参数传递给动画函数,因为它将为每个
requestAnimationFrame
调用,