Box2d在对角线运动时的静态速度更快

时间:2017-02-23 00:49:52

标签: javascript box2d velocity

所以我想为我的玩家做一个活泼的动作。现在我的代码看起来像

  move() {
    var vel = this.body.GetLinearVelocity()

    if(!this.pressingDown && !this.pressingUp){
        vel.y = 0;
    }
    if(!this.pressingRight && !this.pressingRight){
        vel.x = 0;
    }

    if(this.pressingDown){
        vel.y = this.speed;
    }
    if(this.pressingUp){
        vel.y = -this.speed;

    }
    if(this.pressingRight){
        vel.x = this.speed;

    }

    if(this.pressingLeft){
        vel.x = -this.speed
    }
    this.body.SetLinearVelocity(vel)

这是有效的,但是当我移动诊断时,玩家的移动速度超过最大速度。我该如何解决?

1 个答案:

答案 0 :(得分:0)

确定方向单位向量,然后乘以this.speed。这样,速度的大小总是this.speed。否则,正如您所发现的,您的速度可能是sqrt(this.speed * this.speed * 2),而不仅仅是this.speed

确定此方向单位矢量的一种方法是根据按下的键识别您想要移动的角度,然后获取该角度的正弦和余弦值。因此,当this.pressingRight时,角度为0.当this.pressingUp时,角度为90度(或Pi / 2弧度)。或者当this.pressingUp && this.pressingRight时,角度为45度(Pi / 4弧度)。只需完成所有可维护组合的if语句即可。也许把它放在它自己的函数中,称为getAngleInRadiansForKeyPresses

实现(在伪javascript代码中)可能看起来像:

move() {
    var angle = getAngleInRadiansForKeyPresses();
    var vel = new b2Vec2(Math.cos(angle) * this.speed, Math.sin(angle) * this.speed);
    this.body.SetLinearVelocity(vel);
}