1

私は現在 Java で書かれたゲームに取り組んでいます。現時点では、ゲームオブジェクト (プレイヤー、敵など...) を簡単に移動しながら座標でアクセスできるようにする簡単な方法を見つけるのに苦労しています。

私はすでに多次元配列を試しましたが、これは素晴らしいことですが、オブジェクトを簡単に移動させることはできません。オブジェクトが移動するたびに、配列内のオブジェクトを物理的に移動する必要があります。

次に、「通常の」配列を試しました。これにより、オブジェクトを簡単に移動できます。オブジェクトの x、y、または z 値を増やすだけで、配列全体を反復処理せずに座標でオブジェクトにアクセスすることはできません。

今、私は両方を持つことができる妥協点を見つけようとしています.

前もって感謝します、//265

4

2 に答える 2

0

位置を持つすべてのゲーム オブジェクト (プレイヤー、敵など) は、その位置への内部参照を持つ必要があります。

class Position {
  int x;
  int y;
}

interface Positionable {
  Position getPosition();
  void setPosition(int x, int y, GameArea area);
}

class Player implements Positionable {
  //stuff
}

class Enemy implements Positionable {
  //stuff
}

次に、ゲーム領域を表すクラスを作成できます。

class GameArea {

  Positionable[][] grid;
  List<Positionable> gameObjects;

  public Positionable getByLocation(int x, int y) {
    return grid[x][y];
  }

  public void setAtLocation(int x, int y, Positionable p) {
    grid[x][y] = p;
  }

  public List<Positionable> getAll() {
    return gameObjects;
  }

}

これにより、位置によってアクセスし、すべてのオブジェクトを反復処理できます。GameArea以下の実装例に示すように、ゲーム オブジェクトが移動すると、その位置を内部的に更新し、明示的に を更新する必要がありますsetPosition()

void setPosition(int x, int y, GameArea area) {
  area.setAtLocation(this.x, this.y, null);
  area.setAtLocation(x, y, this);
  this.x = x;
  this.y = y;
}
于 2013-09-03T10:37:13.270 に答える