在一个游戏演示中,我要上学,我需要使用W-A-S-D键以及箭头键来移动 Angular 色。我设置了一个功能,并设置了一个开关盒来监听任何按键。这是我的代码段:

//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;
})();

我的问题是我的 Angular 色跳得太远,以至于他从屏幕上消失了。谁能帮我弄清楚我的计算出了什么问题?

最佳答案

一些东西 -

  • BABYLON.Vector3.Up()是(0,1,0)。将此对象与任何数字相乘将返回NaN。我猜物体没有跳离屏幕,只是消失了。
  • Z不在上:-) position.y如果您想向上跳跃,则应将其更改。
  • 如果要使用矢量进行翻译(使用BABYLON.Vector3.Up()矢量),请使用mesh.translate(vector,distance)函数。在您的情况下(假设这是您要设置的正确值):
    this.gameObject.meshObject.translate(BABYLON.Vector3.Up(), this.movementSpeed * Tools.getDeltaTime());
    
  • 我假设您已经这样做了,但是如果没有这样做,请打开物理引擎并为您的场景设置重力。您可以在BJS Docs中了解它: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
  • 关于javascript - 使用Babylon.js进行 Angular 色移动,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27571362/

    10-09 20:46