-3

私は非常に単純な 2D ゲームに取り組んできました。これは非常に基本的なもので、内部に init、render、update などのメソッドを含む Play クラスがあり、2D マップと、あるときに動き回るプレーヤーを作成しました。キーボード入力は、If ステートメントだけを使用して非常に簡単に実行できます。ゲームの種類には、ポケモン ビュー (オーバーヘッド ビュー) があり、上下左右に移動できます。私のマップには障害物があり、ゲームをプレイしている瞬間にプレイヤーは障害物を通り抜けるだけです.プレイヤーが障害物に到達したときに停止し、それを通り抜けることができないようにしたいので、衝突検出を研究して管理しましたまず、コードで 2 つの四角形を作成しました。

Rectangle rectOne = new Rectangle(buckyPositionX, buckyPositionY, 40, 40);
Rectangle rectTwo = new Rectangle(-100, -143, 70,70);

また、2 つの長方形が交差する場合に true を返す変数 x のブール値も作成しました。

boolean x = rectOne.intersects(rectTwo);

これを行った後、Javaに正確に言う方法について混乱しています。ブール値がtrueを返す場合、プレーヤーがその長方形を通過するのを止めます。xがtrueを返すかどうかを検索するifステートメントであることは知っていますが、その中に何を入れるかわかりません経験豊富なユーザーの何人かがこの問題の解決に役立つことを願っています.

4

1 に答える 1

1

私の提案はchangeBuckyPos、衝突と更新をチェックし、衝突buckyPositionXbuckyPositionYないかどうかを確認するメソッドを作成することです。

public void changeBuckyPos(float deltaX, float deltaY) {
  float newX = buckyPositionX + deltaX;
  float newY = buckyPositionY + deltaY;

  // check for collisions
  Rectangle rectOne = new Rectangle((int)newX, (int)newY, 40, 40);
  Rectangle rectTwo = new Rectangle(-100, -143, 70,70);

  if (!rectOne.intersects(rectTwo)) {
    buckyPositionX = newX;        
    buckyPositionY = newY;        
  }
}

これは、現在のコードに含まれるすべての主要なイベント ハンドラーに対しても使用でき、次のようにわかりやすくすることができます。

public void changeBuckyPos(float deltaX, float deltaY) {
  float newX = buckyPositionX + deltaX;
  float newY = buckyPositionY + deltaY;

  // check for collisions
  Rectangle rectOne = new Rectangle((int)newX, (int)newY, 40, 40);
  Rectangle rectTwo = new Rectangle(-100, -143, 70,70);

  if (!rectOne.intersects(rectTwo)) {
    // check global limits
    if ((newX > -1000) && (newX < 1000) && (newY > -1000) && (newY < 1000)) {
      buckyPositionX = newX;
      buckyPositionY = newY;
    }
  }
}
于 2012-12-15T13:26:55.620 に答える