Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Babylon.js进行角色移动_Javascript_Babylonjs - Fatal编程技术网

Javascript 使用Babylon.js进行角色移动

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

在一个游戏演示中,我正在为学校做准备,我需要使用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;
})();

我的问题是,我的角色跳得太远,以至于他从屏幕上消失了。有人能帮我找出我的计算出了什么问题吗?

如果没有剩下的代码,我们几乎不可能帮助您。你能提供你定制的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());