我创建了一个矩形,它有自己的类。在课堂上我创建了一个委托,关闭游戏。
创建委托:
public event EventHandler ExitRequested = delegate { };
在更新方法中,我告诉它何时执行:
if (mouseState.LeftButton == ButtonState.Pressed)
{
ExitRequested(this, EventArgs.Empty);
}
在我的主类中,我像这样执行委托(exitGame是一个矩形):
exitGame.ExitRequested += exitGame_ExitRequested;
我想知道的是如何从屏幕上删除所有项目?让我们说这是一个“新游戏”的功能。我尝试创建此功能的方式与创建退出功能的方式相同,但我无法弄清楚如何删除项目......
答案 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()
,有很多种方法)
请记住,这是一个尚未经过测试的例子。这可以进行优化,更能让您了解集合对于组织游戏对象/实体有用的原因。