新加载的精灵在XNA 4.0中表现不正常

时间:2013-01-13 04:32:08

标签: xna xna-4.0 sprite

这是我正在进行的项目的代码,敌人在屏幕底部来回移动。

class enemy1
{
    Texture2D texture;
    public Vector2 position;
    bool isAlive = false;
    Random rand;
    int whichSide;
    public enemy1(Texture2D texture, Vector2 position)
    {
        this.texture = texture;
        this.position = position;
    }

    public void Update()
    {
        if (isAlive)
        {
            if (whichSide == 1)
            {
                position.X += 4;

                if (position.X > 1000 + texture.Width)
                    isAlive = false;
            }
            if (whichSide == 2)
            {
                position.X -= 4;

                if (position.X < 0)
                    isAlive = false;
            }
        }
        else
        {
            rand = new Random();
            whichSide = rand.Next(1, 3);
            SetInStartPosition();
        }
    }

    private void SetInStartPosition()
    {
        isAlive = true;
        if (whichSide == 1)
            position = new Vector2(0 - texture.Width, 563 - texture.Height);
        if (whichSide == 2)
            position = new Vector2(1000 + texture.Width, 563 - texture.Height);
    }

    public void Draw(SpriteBatch spriteBatch)
    {
        spriteBatch.Draw(texture, position, Color.White);
    }
}

现在我希望有一些敌人来回走动,但是他们从不同的位置开始,所以看起来有几个敌人在屏幕的底部来回走动。我设法在屏幕上绘制了一些其他敌人,除了他们不像第一个敌人。它们只是屏幕上没有移动的图片。所以我现在所拥有的只是英雄在屏幕底部移动,一个敌人,以及坐在屏幕顶部的其他5个敌人什么都不做。我如何在任何时候从具有相同行为的类中轻松添加新的精灵,而不是将十亿个变量存储在其中?

1 个答案:

答案 0 :(得分:0)

通常,在适当的类中包含类似的逻辑是个好主意,所以如果所有Sprite都在哪里做同样的事情,那么你需要做的就是将你的移动代码放在一个公共方法中然后在Update()内调用该方法。

所以,如果您的Sprite类看起来像这样:

public class Sprite
{
    private Vector2 Position; 
    public Sprite(Texture2D texture, Vector2 position)
    {
       Position = position; 
    }

    //then just add this
    public void MoveSprite(int amount)
    {
        position.X += amount; 
    }
}

现在,对象名称“Sprite”非常通用,你的游戏很可能会有很多“Sprite”。

所以你会想要遵循优秀的OOP实践,并且可能将这个特定的sprite命名为不同的东西,然后从我们正在查看的这个类派生出来。 (但我不打算为你做出设计决定)

这是一个模糊的问题,但这是我最好的答案。