从矩形屏幕中删除项目,然后点击

时间:2015-06-07 17:54:59

标签: c# events xna

我创建了一个矩形,它有自己的类。在课堂上我创建了一个委托,关闭游戏。

创建委托:

public event EventHandler ExitRequested = delegate { };

在更新方法中,我告诉它何时执行:

if (mouseState.LeftButton == ButtonState.Pressed)
{
    ExitRequested(this, EventArgs.Empty);
}

在我的主类中,我像这样执行委托(exitGame是一个矩形):

exitGame.ExitRequested += exitGame_ExitRequested;

我想知道的是如何从屏幕上删除所有项目?让我们说这是一个“新游戏”的功能。我尝试创建此功能的方式与创建退出功能的方式相同,但我无法弄清楚如何删除项目......

1 个答案:

答案 0 :(得分:0)

据我了解,您正试图删除所有游戏实体/对象以开始新游戏。通常,这可以通过在集合中存储实体来实现,然后在需要“新游戏”时简单地删除所有集合条目。对于非通用的实体,例如播放器,通常只需重置需要重置的每个成员;位置,积分等。

假设您有一个班级来保存有关实体的信息,例如敌人:

public class Entity
{
    public Texture2D Sprite;
    public Rectangle Bounds;

    public Entity(Texture2D Sprite, Rectangle Bounds)
    {
        this.Sprite = Sprite;
        this.Bounds = Bounds;
    }    

    public void Update(GameTime gameTime)
    {
        //Movement code here
    }    

    public void Draw(SpriteBatch spriteBatch)
    {
        spriteBatch.Draw(Sprite,Bounds,Color.White);
    }
}

然后您将所有实体存储在集合中:

public List<Entity> Entities = new List<Entity>();

通过循环遍历集合来更新和绘制每个实体:

//In main game class
public void Update(GameTime gameTime)
{
    foreach (Entity e in Entities)
        e.Update(gameTime);
}

public override void Draw(GameTime gameTime)
{
    foreach (Entity e in Entities)
        e.Draw(spriteBatch);
}

然后,当您想要开始新游戏并有效删除所有实体时,您只需删除实体列表中的所有条目即可。 (例如,使用List.Clear(),有很多种方法)

请记住,这是一个尚未经过测试的例子。这可以进行优化,更能让您了解集合对于组织游戏对象/实体有用的原因。

相关问题