我正尝试在我的 XNA 游戏中实现屏幕管理。
到目前为止,我已经通过以下链接成功实现了示例 3:http://www.xnadevelopment.com/tutorials/thestateofthings/thestateofthings.shtml
我当前的屏幕切换事件如下:
public void GoToScreenOverview(object obj, EventArgs e)
{
screenStart = null;
screenOverview = new ScreenOverview(this, new EventHandler(GoToScreenOverview), globalVariables);
mCurrentScreen = screenOverview;
}
这从(初始)屏幕“开始”开始,并将游戏移动到下一个屏幕“概览”。等效的倒数方法 GoToScreenStart 做相反的事情。
我的问题是:如何管理所有事件?
假设我有 20 个屏幕。每个屏幕类都需要传递给它的 19 个 EventHandlers,这似乎非常低效,并且添加新屏幕很痛苦。目前 GoToScreenX 类型的事件都在 Game1 类中,但在我看来,所有事件都在“BaseScreen”类中更有意义,每个 Screen 都继承自该类。
最佳答案
如果我是你,我会创建一个 ScreenManager
类。你可以从这样的事情开始:
public class ScreenManager
{
List<GameScreen> screens;
bool isinitialized = false;
public override void Initialize()
{
base.Initialize();
isinitialized = true;
}
protected override void LoadContent()
{
foreach (GameScreen screen in screens)
screen.LoadContent();
}
public void AddScreen(GameScreen screen)
{
screens.Add(screen);
if (isinitialized) screen.LoadContent();
}
// also create a removescreen
public void Draw(Gametime gametime)
{
foreach (GameScreen screen in screens)
{
screen.Draw(gametime);
}
}
// also create a similar method for Updating
}
您可以将 ScreenManager 设为 DrawableGameComponent
(推荐),或者您可以让主游戏调用 ScreenManager.Update()
和 ScreenManager.Draw()
在它各自的方法中。最后,您必须创建一个具有更新和绘制方法的抽象 GameScreen
类,然后让所有其他游戏屏幕继承自 GameScreen
类。希望这会给你一些想法。
关于c# - 屏幕管理 XNA C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21444333/