如何在XNA + C#中动态扩展sprite的大小?

时间:2012-11-21 16:18:32

标签: c# xna collision-detection sprite 2d-games

我正在创建一个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没有正确初始化。但我不确定我应该在哪里改变这一点。如上面的代码示例中所示,浮动值正在改变敌人的规模,但是通过动画类,如果我改变它,它会改变所有敌人(afaik)。 我很抱歉,因为我知道这很模糊,但我无法绕过我应该设置敌人比例大小的地方。创造它的敌人类很好,但它没有参考敌人的实际规模。

1 个答案:

答案 0 :(得分:3)

将比例值存储在Enemy类中。这样,你的Enemy对象的每个实例都有自己的比例值。

如果你没有Enemy课程,你应该创建一个。你也可以存储敌人的纹身,让每个敌人都有自己的样子。

修改

您很可能没有在Draw方法中使用正确的比例值。举个例子:Enemy class:

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);