在 Babylon.js 中移动网格时出现问题

Issue with moving a mesh in Babylon.js

我正在尝试制作一款红色警戒风格的游戏,只是为了提高我的 JS 技能,并对游戏开发有一个基本的了解。我正在尝试将块网格从地面的一部分移动到另一部分。但是,它会立即移动块,而不是为其设置动画。

这是我的 babylonjs-playground... http://www.babylonjs-playground.com/#OYE6Q

我认为问题在于这段代码...

  var moveUnit = function (position, item) { 
    if (position.x > 0) {
        while (item.position.x < position.x) {
            item.position.x += 0.001;
        }
    } else {
        while (item.position.x > position.x) {
            item.position.x -= 0.001;
        } 
    }

    if (position.z > 0) {
        while (item.position.z < position.z) {
            item.position.z += 0.001;
        }
    } else {
        while (item.position.z > position.z) {
            item.position.z -= 0.001;
        } 
    }
}
    while (item.position.x < position.x) {
        item.position.x += 0.001;
    }

通过使用 while 循环,您将在游戏的同一帧内以增量方式将位置更新为最终位置。相当于说:

item.position.x = position.x;

因此,您会看到它从一帧到下一帧从初始位置跳到最终位置;无论您如何更新位置。

如果您想模拟随时间推移的运动,您需要在多个帧中逐步将对象移向目标。如果增量选择正确,并且帧足够快,它看起来像平滑的运动。

要实现这一点,对象需要了解它们跨帧移动的位置,并且您需要在游戏中引入时间的概念。

查看 this tutorial 中的概念示例。

BABYLON.js 有一个内置的动画功能,可以自动处理网格的时间限制。这是一个 link 的工作示例!

http://www.babylonjs-playground.com/#OYE6Q#4