1

我正在创建一个 2D 射击游戏,当某些敌人与射弹物体发生碰撞时,我想增加它的大小。我可以通过更改下面的浮点值来缩放代码中的精灵

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

然后我可以将该浮点数更改为一个变量,并在发生碰撞时更新该变量。唯一的问题是,敌人规模确实会改变,但仅限于新生成的敌人和所有敌人。这很明显,但我想做的(如果可能的话)是改变发生碰撞的敌人的大小,只有那个敌人......

关于我如何去做这件事的任何想法?

编辑:

好吧,我有点困惑。我在 Enemy 类中创建了一个名为 scaleSize 的浮点值。然后在我的 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 对象的每个实例都会有自己的比例值。

如果你没有 Enemy 类,你应该创建一个。您还可以存储enemyTexture,并让每个Enemy 都有自己的外观。

编辑

您很可能没有在 Draw 方法中使用正确的比例值。以 Enemy 类为例:

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 回答