2016-07-07 6 views
0

slick2dでの初期重力システムの実装方法を研究しました。私が持っているコードは次のとおりです(これは更新機能にあります)。Slick2Dでのジャンプの難易度

if (input.isKeyDown(Input.KEY_UP)) { 
     spressed = true; //Has the UP key been pressed? 
    } 
    if (spressed) { 
     if (!sjumping) {//if so, are we already in the air? 
      Sub_vertical_speed = -1.0f * delta;//negative value indicates an upward movement 
      sjumping = true;//yes, we are in the air 
     } 
     if (sjumping) { //if we're in the air, make gravity happen 
      Sub_vertical_speed += 0.04f * delta;//change this value to alter gravity strength 
     } 
     Sub.y += Sub_vertical_speed; 
    } 
    if (Sub.y == Sub.bottom){//Sub.bottom is the floor of the game 
     sjumping = false;//we're not jumping anymore 
     spressed = false;//up key reset 
    } 

ここで問題が発生します。上のキーを押すと、スプライトがジャンプして正常に下がりますが、もう一度上キーを押すと何も起こりません。私はもともと、元気づけられなかったためだと思っていたので、それを偽に設定する行を追加しましたが、まだ一度だけ飛び越えることができます。 :/

答えて

1

Sub.yがSub.bottomにクランプされている必要がありますので、それを上回らないようです。試してみてください:

if(Sub.y >= Sub.bottom) { 
    Sub.y = Sub.bottom; 
    sjumping = false; 
    spressed = false; 
} 
+0

ありがとう!!しかし、これを読んだ人は、=>、<= – Steampunkery

+0

でなければなりません。そう、あなたのボトム値が大きかったことは分かりませんでした。私は適切な編集をしました。また、答えとしてマークしてください:) – Steve

0

私は前に似た何かをやった、とここで私の仮定はSub.yがSub.bottomに等しくないことです。 yの位置と垂直の速度によっては、オブジェクトのyの位置は決してSub.bottomの値になることはありません。以下のコードは、これをテストします:

if (Sub_vertical_speed + Sub.y > Sub.bottom){ //new position would be past the bottom 
    Sub.y = Sub.bottom; 
    sjumping = false; //we're not jumping anymore 
    spressed = false; //up key reset 
}