1

2Dシューティングゲームを作成していますが、敵と発射物が衝突したときに、特定の敵のサイズを大きくしたいと思います。以下のfloat値を変更するだけで、コード内のスプライトをスケーリングできます

enemyAnimation.Initialize(enemyTexture, Vector2.Zero, 47, 61, 8, 30, Color.White, **2f**, true);

次に、そのfloatを変数に変更し、衝突が発生したときに変数を更新できます。唯一の問題は、敵のスケールが変化することですが、新しくスポーンされた敵とそのすべてに対してのみです。これは明らかでしたが、私ができるようにしたいのは(可能であれば)、衝突が発生した敵のサイズを変更し、その敵だけを変更することです...

これをどのように行うかについてのアイデアはありますか?

編集:

さて、私は少し混乱しています。EnemyクラスにscaleSizeというfloat値を作成しました。次に、Game1.csの衝突検出で、forループを実行して、敵オブジェクトのリストを反復処理しています。

// Projectile vs Enemy Collision
            for (int i = 0; i < projectiles.Count; i++)
            {
                for (int j = 0; j < enemies.Count; j++)
                {
                    // Create the rectangles we need to determine if we collided with each other


                    // Determine if the two objects collided with each other
                    if (rectangle1.Intersects(rectangle2))
                    {

                        enemies[j].Health -= projectiles[i].Damage;
                        projectiles[i].Active = false;

                            *enemies[j].scaleSize += 1f;*
                    }
                }
            }

ここで、scaleSizeが正しく初期化されていないことに気付きました。しかし、これをどこで変更すればよいかわかりません。上記の前のコードサンプルのように、float値は敵のスケールを変更していますが、Animationクラスを介して、これを変更すると、すべての敵(afaik)に対して変更されます。これは非常に曖昧であることがわかっているので申し訳ありませんが、敵のスケールサイズを設定する場所に頭を包むことができません。敵クラスを作成することは問題ありませんが、敵の実際の規模を参照しているわけではありません。

4

1 に答える 1

3

スケール値を敵クラスに保存します。そうすれば、Enemyオブジェクトの各インスタンスに独自のスケール値があります。

Enemyクラスがない場合は、作成する必要があります。また、enemyTextureを保存して、各敵に独自の外観を持たせることもできます。

編集

Drawメソッドで適切なスケール値を使用していない可能性があります。敵のクラスを例にとってみましょう。

class Enemy
{       
   protected float Scale { get; set; }
   protected Texture2D Texture { get; set; }
   protected Vector2 Position { get; set; }

   public Enemy()
   { 
       Scale = 1f;
   }

   public void Hit()   
   {
       Scale = 2f;
   }

   public void Draw(SpriteBatch spriteBatch)
   {
        spriteBatch.Draw(Texture, Position, null, Color.White, 0, Vector2.Zero, Scale, SpriteEffects.None, 1);   
   }
}

使用例:

Enemy A = new Enemy();      
A.Hit();    
A.Draw(spriteBatch);
于 2012-11-21T16:23:03.540 に答える