2017-02-23 23 views
0

所以我希望我的球員能夠快速移動。現在我的代碼看起來像Box2d對角線運動時的靜態速度更快

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) 

這個工程,但是當我移動diagnolly時,播放器移動速度超過最大速度。我該如何解決?

回答

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