0

さて、私はしばらくこれに対する答えを探していましたが、Google と私のすべての力が私を裏切ったようです。

私はこのクラスを取得しました。(私の世界)。MyWorld 内には、オブジェクトの配列があります

GameUnit m_MyUnits[] = new GameUnit[maxUnits];

現在、m_MyUnits は GameUnits とサブクラスで満たされ、チーズケーキのように幸せに画面を歩き回っています。それぞれに独自の小さな衝突検出を書いたので、お互いに衝突することはありません。

そして、すべて正常に動作しますが、! 衝突検出が機能するために、最も遅い方法を選択しました(そして、ほとんどのメモリが必要だと思います)

MyWorld では、最初に各 GameUnit をループし、配列の X と Y の位置を取得します private int[][] Positions = new int[2][maxUnits]);

次に、すべての GameUnit をループして、この配列をそれに割り当てます。(GameUnit には、このための Positions という独自の配列があります)

さて、これが機能している間、私はこれがばかげていると思わずにはいられません.... まぁ、そんな言葉はここでは使いません。

GameUnit が MyWorld の位置を呼び出す方法はありますか、それともより良い方法は、ゲーム ユニットが MyWorld で配列 m_MyUnits[].getX() および m_MyUnits[].getY() を呼び出す方法はありますか (私は Parent を使用します) GameUnit から MyWorld を参照する)

For(int i = 0;i < Parent.maxUnits;i++) {
  int targetX = Parent. m_MyUnits[i].getX();
  int targetY = Parent. m_MyUnits[i].getX();
  //Do some thing like collition detection with the data.
}

これは可能ですか?

あなたのJavaApprentis。

4

2 に答える 2

0

を作成するときに、 をコンストラクター引数としてGameUnit渡すことができます。MyWorldコンストラクターは、オブジェクトをメンバー変数にGameUnit格納できます。MyWorld次に、衝突検出を行う必要がMyWorldある場合、そのオブジェクトのメソッドを呼び出して、潜在的なパートナーのリストを要求できます。

GameUnit

private MyWorld myWorld;

public GameUnit(int,int,double, MyWorld m) {
    myWorld = m;
}

そして、MyWorldあなたが作るときGameUnit

new GameUnit(1, 2, 1.0, this);

次に、 のすべてのメソッドでGameUnitMyWorldオブジェクトをmyWorld使用できるようにします。

于 2012-04-25T21:46:09.890 に答える
0

タイプ MyWorld の World プロパティを GameUnit に追加します。GameUnit のコンストラクターを変更して World を引数として受け入れ、World をそれに設定します。

GetX および GetY メソッドを MyWorld に追加します。これにより、 m_MyUnits[i].getX() および getY が配列内のインデックスを引数としてラップされます。

のようなものを与える

For(int i = 0;i < World.maxUnits;i++) {
  int targetX = World. getX(i);
  int targetY = World. getY(i);
  //Do some thing like collition detection with the data.
}

これを逆にして次のようなことをすると思います

If (World.Collide(this))
{
  // Die messily.
}
于 2012-04-25T22:16:41.943 に答える