1

XNAを使用してWP7のゲームに取り組んでいます。これが私の構造です:

public abstract class enemy
{}

子要素:

public class genericEnemy : enemy{}
...
public class snake : enemy {}

等...

WP7 では、多くのものが移動および/または削除されたようです (特にシリアライゼーションで)。何度も検索しても、解決策を見つけることができませんでした。子要素を複製しようとしています。

例: レベルのロード時に、3 つの異なる敵の配列をロード フェーズに渡します。ロード中に、これらの敵をそれぞれ複製して、ゲームプレイ中にそれぞれ 20 体ずつ飛び回るようにする必要があります。

私が見たすべてのソリューションは、WP7 ライブラリに存在しないものを参照しています。

4

3 に答える 3

2

私の知る限り、これを行う「ライブラリ」の方法はありません。1つの解決策は次のとおりです。

1)その敵のコピーを返す敵で Clone() メソッドを宣言します。

abstract class Enemy {
     public abstract Enemy Clone();
}

2) すべての具象型に実装して、Snake が新しい Snake などを作成するようにします。例:

class Snake : Enemy {
     int speed;
     public override void Enemy Clone() {
         var clone = new Snake();
         clone.speed = speed;
         return clone;
     }
}

3) これで、具象型のオブジェクトはそれ自体を複製する方法を認識できるようになりました。そのため、敵の配列がある場合は、それぞれに対して Clone() を呼び出すことができ、適切な具象型が適切な方法で作成されます。

于 2012-04-22T19:00:03.307 に答える
0

コピー コンストラクターを呼び出す抽象メソッドを使用します。

public abstract class Enemy
{
   private readonly int mEnemyData;

   protected Enemy(Enemy pEnemy)
   {
      mEnemyData = pEnemy.mEnemyData;
   }

   public abstract Enemy Clone();
}

public sealed class GenericEnemy : Enemy
{
   private readonly double mGenericEnemyData;

   private GenericEnemy(GenericEnemy pGenericEnemy)
    : base(pGenericEnemy)
   {
      mGenericEnemyData = pGenericEnemy.mGenericEnemyData;
   }

   public override Enemy Clone()
   {
      return new GenericEnemy(this);
   }
}
于 2012-04-23T01:46:56.453 に答える
0

ある種の ID から敵を作成できる敵工場を作成します。レベルをロードしている間、敵を作成する必要がある場合はファクトリーを呼び出すことができます:

class EnemyFactory
{
 Enemy CreateEnemy(int id)
 {
  if (id == 0)
   return new Snake();
  return new GenericEnemy();
 }

}


void LoadLevel()
{
 // bla bla
 Level level = new Level();
 int enemyId = LoadFromFile();
 level.AddEnemy(EnemyFactory.CreateEnemy(enemyId));
}

このようにして厄介なクローン コードを取り除き、ファクトリ クラスですべての敵のインスタンス化を制御できます。

于 2012-04-22T15:52:09.053 に答える