在我上学的游戏演示中,我需要使用W-A-S-D键和箭头键移动我的角色。我设置了一个功能并设置一个开关盒来监听任何按键操作。这是我的代码片段:
//Handles the player's movement
var PlayerMovement = (function () {
//Constructor
function PlayerMovement() {
this.gameObject = null;
this.movementSpeed = 0;
this.rotationSpeed = 0;
}
PlayerMovement.prototype.awake = function () {
console.log("Awake");
};
PlayerMovement.prototype.update = function () {
//console.log(Tools.getFps());
}
PlayerMovement.prototype.onKeyPressed = function (key) {
switch(key)
{
case KeyType.W:
case KeyType.UpArrow:
console.log("Moving up");
this.gameObject.meshObject.position.z += (BABYLON.Vector3.Up() * this.movementSpeed * Tools.getDeltaTime());
break;
case KeyType.A:
case KeyType.LeftArrow:
//TODO: Do stuff
break;
case KeyType.S:
case KeyType.DownArrow:
//TODO: Do stuff
break;
case KeyType.D:
case KeyType.RightArrow:
//TODO: Do stuff
break;
}
}
return PlayerMovement;
})();
我的问题是我的角色跳得太远,他从屏幕上消失了。任何人都可以帮我弄清楚我的计算有什么问题吗?
答案 0 :(得分:4)
一些事情 -
如果要使用向量进行翻译(使用BABYLON.Vector3.Up()Vector),请使用mesh.translate(向量,距离)函数。在您的情况下(假设这是您想要设置的正确值):
this.gameObject.meshObject.translate(BABYLON.Vector3.Up(), this.movementSpeed * Tools.getDeltaTime());
我假设您已经这样做了,但如果没有 - 打开物理引擎并为场景设置重力。您可以在BJS文档中了解它:http://doc.babylonjs.com/page.php?p=22091
实现跳转的更好方法是在正确的方向(向上)应用加速并让物理引擎发挥其魔力。检查"应用冲动"在这里 - http://blogs.msdn.com/b/eternalcoding/archive/2013/12/19/create-wonderful-interactive-games-for-the-web-using-webgl-and-a-physics-engine-babylon-js-amp-cannon-js.aspx
答案 1 :(得分:0)
如果没有剩下的代码,我们几乎不可能帮助你。你能提供完整的自定义JS文件吗?我认为这可能是你的相机角度的一个问题,而不是角色的运动。此外,这是第一人称游戏还是第三人称游戏?
很抱歉,我会留下这个“答案”作为评论,但我没有50个声望点。试图征求更多信息以提供实际答案。