Класс экрана для менеджера экранов
Продолжение поста про менеджер экранов.
Класс экрана унаследован от DrawableGameComponent. Благодаря этому, после добавления экрана в коллекцию компонент игры, методы Update() и Draw() будут вызываться автоматически.
Экран имеет коллекцию компонент.
public Collection<GameComponent> Components;
public Screen(Game game) : base(game)
{
Components = new Collection<GameComponent>();
}
Метод для добавления компонент экрана в коллекцию компонент игры.
protected void AddComponentsToGame()
{
foreach (GameComponent component in Components)
{
if (this.Game.Components.IndexOf(component) < 0)
this.Game.Components.Add(component);
}
}
Метод Update() добавляет в списокк компонент игры те компоненты, которых там нет. Это сделано для добавления тех игровых объектов, которые были созданы в процессе работы экрана. Таким образом, нет необходимости добавлять объекты в список компонент игры, достаточно добавить их в экран.
public override void Update(GameTime gameTime)
{
AddComponentsToGame();
base.Update(gameTime);
}
Методы активации и деактивации. Именно их вызывает менеджер экранов.
public void Activate()
{
OnActivate();
this.Game.Components.Clear();
this.Game.Components.Add(this);
foreach (GameComponent component in Components)
this.Game.Components.Add(component);
}
public void Deactivate()
{
foreach (GameComponent component in Components)
if (this.Game.Components.IndexOf(component) >= 0)
this.Game.Components.Remove(component);
if (this.Game.Components.IndexOf(this) >= 0)
this.Game.Components.Remove(this);
OnDeactivate();
}
protected abstract void CreateComponents();
public virtual void OnActivate()
{
CreateComponents();
}
public virtual void OnDeactivate()
{
this.Components.Clear();
}
Для создания класса конкретного экрана нужно унаследовать от базового класса и переопределить метод CreateComponents().
