gpt4 book ai didi

c# - 屏幕管理 XNA C#

转载 作者:太空宇宙 更新时间:2023-11-03 19:10:05 25 4
gpt4 key购买 nike

我正尝试在我的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com