c# - 屏幕管理 XNA C#

标签 c# xna

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

相关文章:

c# - 不让我使用秒表类。在 Visual Studio

c# - 如何调用以字符串为分隔符的String.Split?

javascript - 从 C# 中的列表转换为 html(嵌套 ul li)

c# - 如何(反)序列化需要自定义 JsonConverter 的类型列表?

.net - 为什么Visual Studio无法打开.csproj文件?

visual-studio-2013 - 如何卸载 .vsix Visual Studio 扩展?

c# - XNA - 键盘文本输入

c# - Moq 单元测试用例 - 带有 WebAPI 的 ASP.NET MVC

c# - 在Windows服务C#中访问网络路径

C# 调用 python 解释器