2

BlueJ を使用して Java で単純なプラットフォーム ゲームを開発しています。

プログラミングがあまり得意ではないので、今後数週間にわたって、このプロジェクトの助けを求めるいくつかの質問を投稿します。ですから、迷惑にならないようにお願いします。親切に助けていただければ幸いです。

私のゲームには、ゲームを終了してステートメントをコンソールに出力する gameOver メソッドがあります。私が望むのは、プレイヤー スプライトが画面から「落ちた」ときにこのメソッドを呼び出すことです。

現在、画面の下部に長方形を配置して、ある種の危険 (水など) を表し、プレイヤーがそれに衝突すると、gameOver メソッドが呼び出されてゲームが終了します。ただし、プレイヤーが画面の特定の高さを下回った場合にゲームが終了することをお勧めします。

これは私のgameOverメソッドです(「Game」クラスから)-

/** End the game. */
public void gameOver()
{
    world.terminate();
    isOver = true;
}

これは私のプレイヤー スプライトです (現在、ポリゴンを使用して描画されています)-

super(Utils.createPolygon(170, 102,
    155, 118, 137, 118, 151, 134, 146,
    140, 167, 140, 170, 135, 174, 140,
    193, 140, 188, 134, 202, 118, 186,
    118, 170, 102)); 
setColor(new Color(254, 167, 184));

これは、プレイヤーが敵と衝突したときにゲームを終了させるコードです ('Enemy' クラスから、同様のコードが Hazard クラスでも使用されます)。

if (e.contact.involves(player) && (player.getLives() < 1)) {
    System.out.println("YOU ARE DEAD!");
    game.gameOver();
}

プレーヤーのスプライトが画面の特定の座標を下回ったり超えたりしたときに gameOver メソッドを呼び出す同様の、または少なくとも単純なソリューションが必要です。

これを達成するために何をすべきかについてのアイデアを提供するために、サンプル/サンプルコードと、それを理解するのに役立つコメントを親切に提供していただければ幸いです。

どうもありがとうございました。あなたの答えを楽しみにしています。

4

4 に答える 4

3

開始するには:

  1. プレーヤーの現在の位置を取得する方法を考えてみてください。
  2. プレイヤーが落下する原因を考えてください (重力と落下を実装するメソッド/クラスが必要ですか?)
  3. 彼らがあなたの世界の境界にぶつかるとき、プレーヤーの位置を確認してください。それらが境界の外にある場合は、GameOver メソッドを呼び出します。

境界を確認するには:

  1. あなたの世界には、プレイヤーが生き続けるために維持しなければならない最小の高さが必要です。この値を覚えておいてください。
  2. プレーヤーの垂直位置を取得し、この最小の高さと比較すると、ブール値の結果が得られるはずです (セーフかデッドか)。
  3. 画面の位置は左上から始まり、右と下に行くにつれて増加するため、プレイヤーの位置はおそらくこれを反映していることに注意してください。player.getPosition().Y > world.getMaxAllowedHeight()したがって、テスト ( );を探している可能性が最も高いです。

参考までに、すでに試したことと、どこで問題が発生したかを投稿してください。スプーンで与えられた解決策を求めても、誰の助けにもなりません。これについては、自分で少し考える必要があります。どこから始めればよいかわからない場合は、代わりにそれを教えてください。私たちはあなたを正しい方向に導くことができます。

更新: すでに少し考えたことがあるようですね。それはすばらしいことです。私があなたの喉を飛び降りるのが辛かったら申し訳ありませんが、あなたの元の投稿はそうではないと示唆していました. ただし、次回は、自分で解決する質問よりも、自分で解決できる質問をするようにしてください。簡単な「この問題への取り組みを開始する方法を誰か教えてくれませんか?」しましょう。

于 2009-02-09T00:39:22.383 に答える
2

あなたが宿題をするのを助けるために:

   // if the player goes out of bounds, the game is over
   if (player.getBounds().outside(game.getBounds()) 
   {
        System.out.println("YOU WENT OUT!");
        game.gameOver();
    }

プレイヤーにはある種の境界領域があり、ゲーム自体にはある種の領域があると仮定します...

于 2009-02-09T00:36:06.993 に答える
2

「私のスプライトはどこにあるの?」という質問を自問してみてください。

次の質問は、「私の世界の境界は何ですか?」です。

この 2 つの質問に答えることができれば、自分自身の質問に答えることができるはずです。

2 次元の世界があると仮定すると、スプライトの位置が水平方向の境界内と垂直方向の境界内にある限り、スプライトはマップ上に残りますが、そうでない場合はそうではありません。

于 2009-02-09T00:38:36.860 に答える
1

ゲームループはありますか?

通常、ゲームには、ロジックとレンダリングプロセスを制御する一種のタイトループがあります。

while(stillRunning)
{

   if(isPlayerDead()) 
   { 
       showGameOverScreen(); 
   }
   else
   {
       PerformLogic();
       RenderToScreen();
   }

   sleep(0);
}

isPlayerDead()メソッドを展開して、衝突をチェックし、スプライトの位置が画面の高さよりも大きいかどうかを確認する必要があります。

于 2009-02-09T01:09:49.593 に答える