2016-07-04 20 views
3

私は、ユーザーが左または右の矢印キーを保持すると、その方向に徐々に加速し、最終的に最高速度に達するプログラムがあります。キーが離されると、キャラクターは完全に停止するまで徐々に減速します。javascript緩やかな減速度(左)

私の右矢印キーは問題ありませんが、左が壊れています。私の左矢印キーはうまく加速しますが、キーが離されると、文字はちょうど左キーが押される前に開始位置にまっすぐに移動します。 (これは始まった場所よりも少し先にあるかもしれません)

私はこれがなぜ起こっているのか分かりますが、私はそれを修正しようとしましたが失敗しました。ここで

は私のコードです:

var maxSpeed = 15; 
var xForce = 0; 
var kingXPos = 10; 
var kingYPos = 200; 

var draw = function() { 
    background(255, 0, 0); 
    image(getImage("creatures/Winston"), kingXPos, kingYPos, 50, 50); 

    if (keyIsPressed && keyCode === RIGHT) { 
    kingXPos = kingXPos + xForce; 
    xForce = xForce + 0.1; 
    if (xForce >= maxSpeed && keyIsPressed) { 
     xForce = maxSpeed; 
    } 
    } 

    if (keyIsPressed && keyCode === LEFT) { 
    kingXPos = kingXPos - xForce; 
    xForce = xForce + 0.1; 
    if (xForce <= -maxSpeed && keyIsPressed) { 
     xForce = -maxSpeed; 
    } 
    } 

    if (!keyIsPressed) { 
    if (xForce > 0) { 
     kingXPos = kingXPos + xForce; 
     xForce = xForce - 0.1; 
    } 
    } 
}; 

私は左のキーを離したときに、私の文はまだ真である場合keyIsPressed、およびxForceはまだ小さくなっているため、このコードが壊れています!。私はちょうどこれを修正する方法を知らない。

答えて

1

方向がの場合は変数がxForce、その他の場合は方向がありません。これが問題です。

方向を指定して力を追跡したくない場合は、xForce符号(0より大きいかどうか)を考慮してください。

これはうまくいくかもしれない:

if (keyIsPressed && keyCode === RIGHT) { 
    kingXPos = kingXPos + xForce; 
    xForce = xForce + 0.1; 
    if (xForce >= maxSpeed && keyIsPressed) { 
     xForce = maxSpeed; 
    } 
    } 

    if (keyIsPressed && keyCode === LEFT) { 
    kingXPos = kingXPos + xForce; 
    xForce = xForce - 0.1; 
    if (xForce <= -maxSpeed && keyIsPressed) { 
     xForce = -maxSpeed; 
    } 
    } 

    if (!keyIsPressed) { 
    kingXPos = kingXPos + xForce; 
    if (xForce > 0) { 
     xForce = xForce - 0.1; 
    } else if(xForce < 0) { 
     xForce = xForce + 0.1; 
    } 
    } 

注オブジェクトが方向に移動しているとあなたが方向を変更した場合、それは最初にその方向に減速し、その後で移動を開始し、このコードを使用していること反対方向。

関連する問題