2012-04-25 15 views
0

今、私はこれに対する答えをしばらく探していましたが、Googleと私のすべての力が私を失敗させるようです。オブジェクトはJavaで親とのコミュニケーション

私はこのクラスを取得しました。 (私の世界)。 はMyWorld以内に私は今m_MyUnitsがここにオフGameUnitsおよびサブクラスで埋めている

GameUnit m_MyUnits[] = new GameUnit[maxUnits]; 

オブジェクト

の配列を持っている、とインクルードはチーズケーキのように幸せな画面の周りを歩いています。 私は自分のそれぞれに小さな衝突検出を書いているので、お互いに衝突しません。

すべて問題なく動作しますが、 MyWorld I第​​1のループトラフで私は方法(と私は考える必要ほとんどのメモリ)の最も遅いを選択した動作するように私の衝突検出

については 各GameUnitと配列 プライベートint型のためにそのXとYの位置を取得します[] [ ]位置=新しいint [2] [maxUnits]);

次に、すべてのGameUnitをループし、この配列を割り当てます。 (GameUnitにはポジションという独自の配列があります)

これは動作しますが、これは愚かなものだとは思えません。さて、私はここでそれらの言葉を使用しません。

GameUnitは。のgetX()とMyWorld でm_MyUnits []。のgetY()いくつかの事のように[]アレイm_MyUnitsを呼び出すためにゲームユニットのために、より良い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. 
} 

が、このことは可能ですか(私はGameUnitからMyWorldを参照するために親を使用しますか)?

あなたのJavaApprentis。

+0

ような何かをしたいと思うことを言っ

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. } 

のようなものを与えるためにあなたが 'MyWorld'の変数インスタンスへの参照を持っているか、すべてのですか静的にしたいものは?また、この依存度は、設計に欠陥があることを示している可能性があります。 – twain249

+0

さて、それは欠陥がある...または私はそう思いますか? 天気を問う場合は、MyWorldの情報をGameUnitのインスタンスに渡しました。 私はしていない!私がしたいと思うことのようなものだと思います。しかし、私は確信していません。 IDがこれを行うのが好きなら、どのようにすればいいですか? GameUnitのコンストラクタは(int、int、double)何を追加するのですか? とは何ですか? – JavaApprentis

+0

それから@ErnestFriedmanHillが示唆していることを行い、あなたのコンストラクタに 'MyWorld'引数を追加することができます。 – twain249

答えて

0

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

private MyWorld myWorld; 

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

そしてあなたがGameUnitを作るMyWorld、中:

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

その後GameUnitのすべてのメソッドでは、あなたが使用可能myWorldMyWorldオブジェクトを持っています。

+0

乾草さん、ありがとうございます。私は前にtwainに答えました: IDはこれをやりたがっていますが、どうしたらいいですか? GameUnitのコンストラクタは(int、int、double)何を追加するのですか?何を渡すべきか?何を呼び出すのですか? – JavaApprentis

+0

詳細は私の編集を参照してください –

+0

ありがとう、これは私を救った(私はプログラムの実行時に使用したRAMの80%を使い果たした。 – JavaApprentis

0

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

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

私はこれを反転し

If (World.Collide(this)) 
{ 
    // Die messily. 
} 
関連する問題