2012-01-09 9 views
1

G'dayすべて、ゲームオブジェクトの配列を作成する

敵と呼ばれるいくつかのオブジェクトが画面上にある場合、どのように配列に入れることができますか? 私の最初の考えは、創作時にそれをすることでした。私は、アレイに追加しようとした敵を作成するときに

public enemy[] enemiesArray = new enemy[5]; 

が続い:

for (int i = 0; i < 2; ++i) // This will create 2 sprites 
     { 
      Vector2 position = new Vector2((i+1) * 300, (i+1) * 200); 
      Vector2 direction = new Vector2(10, 10); 
      float velocity = 10; 
      int ID = i; 

      Components.Add(new skull(this, position, direction, velocity, ID)); 
      skullsArray[i] = skull; // This line is wrong 
     } 

私もそれにしようとした私は、私のGame.csファイルの先頭で宣言を置きますこのようなコードを使用して、更新()メソッドで:

foreach (GameComponent component1 in Components) 
     { 
      int index = component1.ID; 
      if (component1.ToString() == "enemy") 
      { 
       enemiesArray[index] = component1 
      } 
     } 

しかし、コンポーネント1はIDを持っていないので、それが落ちます。私はプログラムが各GameComponentを通して列挙するので、コンポーネントの限られた範囲のデータにしかアクセスできないと仮定しなければなりません。最後に

私は[1]、敵[2]などの敵として私の敵を参照できるようにしたい

おかげで、 アンドリュー。

答えて

2

なぜ、配列のように動作するListを使うことはできませんが、可変長です。あなたがコンポーネントを追加するのと同じように

List<Enemy> EnemyList; 

//You have to initalize it somewhere in Initalize or LoadContent (or the constructor) 

あなたは敵を追加することができます(コンポーネントList<GameComponent>

EnemyList.Add(enemy); 

あるので、次にあなたが敵にアクセスすることができます:

EnemyList[index].DoSomething(); 

を次に、あなたはこれを行うことができます編集:ちょうどあなたのコードをもう一度見て、私は頭蓋骨が存在しないことに気づいた。

new skull(this, position, direction, velocity, ID); 

そうするのではなく、クラスのインスタンスよりも、配列にクラスを追加しようとしているので:)

+0

ありがとうございます。それは私が欲しかったものです。 Ta。 –

2

あなたがゲーム内のクラスラインpublic enemy[] enemiesArray = new enemy[5]; を入れていると仮定すると、あなたのenemiesArrayはあなたのゲームのちょうど分野でありますゲームコンポーネントではないクラスでは、

myGameClass.enemiesArray[1] 

とすることができます。ゲームクラスが有効範囲内にあるとします。

また、@名詞として、リストはランタイム時に配列よりもサイズ変更が容易であるため、 'List(5)enemiesArray;代わりに

これは非常にスケーラブルな処理方法ではありませんが、GameComponentsを作成して登録する方法を調べることをお勧めします。また、あなたが代わりなど

enemiesArray、bulletsArray、someOtherArrayを有するのすべてのあなたのゲームのアイテムを参照するために一つの場所を持つことができますので、簡単な方法は

public abstract class GameThing 
{ 
    public Vector2 Position {get; set;} 
    //some other props... 
} 

のような抽象クラスを持つことで、それは一般的な作りと考えます敵が

public class Enemy : GameThing 
{ 
    //some props 
} 

、代わりの public enemy[] enemiesArray = new enemy[5]; あなたが を使用するように定義されるように、あなたのゲームアイテムのベースとしてこれを使用します 追加項目は

gameItemsArray[1] = new Enemy(); 
+0

これはすばらしい次のステップです。私はその継承プロセスを試す予定です。 Ta。 –

+0

あなたは遅かれ早かれ早くそれをしなければなりません、このようなものを改装するために豚になることができますが、ゲームでは幸運です:) – Stuart

関連する問題