Javascript 使用Babylon.js进行角色移动
在一个游戏演示中,我正在为学校做准备,我需要使用W-a-S-D键和箭头键移动我的角色。我设置了一个功能并设置了一个开关盒来监听任何按键。以下是我的代码片段:Javascript 使用Babylon.js进行角色移动,javascript,babylonjs,Javascript,Babylonjs,在一个游戏演示中,我正在为学校做准备,我需要使用W-a-S-D键和箭头键移动我的角色。我设置了一个功能并设置了一个开关盒来监听任何按键。以下是我的代码片段: //Handles the player's movement var PlayerMovement = (function () { //Constructor function PlayerMovement() { this.gameObject = null; this.movement
//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;
})();
我的问题是,我的角色跳得太远,以至于他从屏幕上消失了。有人能帮我找出我的计算出了什么问题吗?如果没有剩下的代码,我们几乎不可能帮助您。你能提供你定制的JS文件的全部内容吗?我认为这可能是你的相机角度的问题,而不是角色的移动。还有,这是第一人称游戏还是第三人称游戏 很抱歉,我会留下这个“答案”作为评论,但我没有50点的声誉点。试图获取更多信息以提供实际答案 有几件事-
- BABYLON.Vector3.Up()是(0,1,0)。将此对象与任何数字相乘将返回NaN。我猜物体不会从屏幕上跳开,它只是消失了李>
- Z未向上:-)位置。如果您希望向上跳,则应更改y
- 如果要使用向量(使用巴比伦.Vector3.Up()向量)进行平移,请使用mesh.translate(向量,距离)函数。在您的情况下(假设这是您想要设置的正确值):
- 我想你已经这么做了,但是如果没有,打开物理引擎,为你的场景设置重力。您可以在BJS文档中了解:
- 实现跳跃的更好方法是在正确的方向(向上)施加加速度,让物理引擎发挥其魔力。在这里查看“应用脉冲”——
(BABYLON.Vector3.Up()*this.movementSpeed*Tools.getDeltaTime())
太大了?为什么不看看每个组件,看看它为什么太大?如果您将this.movementSpeed
设置为0,那么显然,您的位置根本不会改变。。。因此,您没有向我们显示相关代码。抱歉,我将速度移动指定为1,并且还更改了角色移动(或应该移动)时发生的情况的计算:this.gameObject.meshObject.position.z+=(BABYLON.Vector3.Up()*this.movementSpeed*Tools.getDeltaTime());现在发生的事情是,我的角色跳到前面,从屏幕井消失,将另外两个值(BABYLON.Vector3.Up()
)和Tools.getDeltaTime()`)写入控制台,看看哪个太大。
this.gameObject.meshObject.translate(BABYLON.Vector3.Up(), this.movementSpeed * Tools.getDeltaTime());