2016-09-18 39 views
0

我正在尝试制作一个Red Alert风格的游戏,只是为了增强我的JS技能,并获得对游戏开发的基本了解。我正在尝试将块网从地面的一部分移动到另一部分。但是,它会立即移动块,而不是动画。在Babylon.js中移动网格的问题

这里是我的babylonjs操场... 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; 
     } 
    } 
} 

回答

1
while (item.position.x < position.x) { 
     item.position.x += 0.001; 
    } 

通过使用while循环,你正在更新位置到游戏同一帧内的最后位置。它相当于说:

item.position.x = position.x; 

因此,你会看到它从一个帧跳到它的最终位置,从一帧到另一帧;不管你如何更新位置。

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

为了达到这个目的,物体需要了解他们在哪些场合移动,并且需要在游戏中引入时间概念。

查看this tutorial查看该概念的示例。

+1

我想这是有道理的,我想保持的东西是抽象幕后的时候,当你调用'engine.runRenderLoop(()=> scene.render());',我会看看那个链接,谢谢! –