2017-06-11 13 views
-1

私はロバのkongゲームを作ろうとしています。 現在、ジャンプと呼ばれるブーリアンがあります。このブーリアンは、プレイヤーがジャンプしているかどうか、スペースバーが押されたときにゲームを知らせるものです。ジャンプ中にプレイヤーが壁を突き抜ける(JAVA)

public void keyPressed(KeyEvent e) { 
    if (e.getKeyCode() == KeyEvent.VK_SPACE){ 
     StartJump(); 
    } 
} 

StartJump:速度を変更してスプライトのジャンプを開始させます。ジャンプブール値をtrueに変更します。

public void StartJump() { 
    if (onground) { 
     velocityY = -4; 
     onground = false; 
     jump = true; 
    } 
} 

KeyReleased:

public void keyReleased(KeyEvent e) { 
    if (e.getKeyCode() == KeyEvent.VK_SPACE){ 
     EndJump(); 
    } 
} 

EndJump:セットは、問題はあなたがスペースバーを押したときに、ジャンプがtrueに設定されて発生する偽

public void EndJump() { 
    if(velocityY < -6.0) 
     velocityY = -6; 
    jump = false; 
} 

にジャンプ。 これは、MarioのYポジションを機能させないようにするforloopを引き起こし、彼は床に落ちる。

ループ:!マリオはそれが問題を引き起こしているmario.getJump()である

for(int i = 0; i < bricks.size(); i++) { 
     if(marHitBox.intersects(bricks.get(i)) && !mario.getClimb() && !mario.getJump() && marHitBox.intersects(jump.get(i))) { 
      mario.setMarY((int)bricks.get(i).getY()-40); 
      mario.setVeloY(0f); 
      mario.setOnGround(true); 
     }  
    } 

の上に立つためにレンガだけの四角形が含まれています。スペースバーがxミリ秒以上にわたってジャンプ= falseにするために保持されているかどうかを確認する方法はありますか?

+0

を行かせるだろう多分それは私ですが、あなたの質問/コードは私を混乱させると思います。スペースバーが押されたときに呼び出されるforループはどこですか? –

+2

質問のためだけに新しいプログラムを作成できれば、コンパイル可能で実行可能な[mcve]があり、問題が直接わかります。 –

+0

メソッド名は大文字で始めるべきではありません! APIからメソッドを表示できますか? Javaの規約に従ってください。自分で作成しないでください。 – camickr

答えて

0

スペースバーを押して離してからの経過時間を測定してみてください。

+0

私はそれを試みましたが、その問題はスペースバーが解放された後に値が計算されることです。スペースバーがリリースされる頃には、マリオはすでにいくつかのフロアを通過しています。 – Ritsin

0

私はちょうどチェックは、それが離れて

public void StartJump(){ 

    if (!jump && onground){ 
     velocityY = -4; 
     onground = false; 
     jump = true; 
    } 
} 
+0

それは動作しませんでした – Ritsin

+0

私は投稿したコードをexaclyを使用することは確かですか? –

+0

はい答えをコピーしました – Ritsin

関連する問題