是否有可能在多个游戏中重复使用相同的窗口?

特别是,我正在考虑C#和XNA,显然在Windows上。 比方说,我有一个普通的XNA游戏,但是在某个时候,我想暂时切换到在XNA中实现的迷你游戏,但是完全独立于我的游戏。

有什么办法可以切换到两个游戏之间,而重复使用相同的窗口句柄? 最好把旧状态保存在内存中,尽管我也可以把这个持久性写入一个文件。

当回到最初的游戏时,有什么方法可以访问迷你游戏主要方法返回的值? 例如,1或0取决于玩家是否清除了迷你游戏。


安德鲁·罗素写道:

你应该在同一个程序中将你的迷你游戏和你的主游戏分成不同的类。 每个类都应该有Update,Draw,Initialize等方法。 然后,你应该有一个主控制器来调用这些方法一次只有一个游戏活动(这也可以只是在你的主要游戏类)。

感谢你的回答。 你的建议就是我在正常的游戏环境中所做的事情 – 我可以创建所有迷你游戏及其内容。

但这不是游戏,而是创造graphics冒险的游戏制造工具,最终用户可能会觉得需要插入外部迷你游戏以响应某些游戏事件。

我试图replace旧的内部引擎是在Flash中完成的,只需在主SWF中加载SWF即可解决此问题。 它在大多数情况下工作正常。 我正试图做类似的事情,但现在与XNA。

但是,按照你的训练或想法,也许我可以创建一个单独的程序集,包含所有迷你游戏的基类或通用接口,并将其编译为一个dll。 然后用户将引用该库,实现接口并编译到自己的库中,该库可以在运行时由引擎加载,并在主游戏内部作为单独的状态执行。 我错过了一些隐藏的含义?

没有。在API中没有官方的方法。

如果你疯了也许可以使用reflection来获取底层的DirectX对象,然后诱使他们重新使用一个窗口,并在正确的时间触发内容重新加载。 (基本上,一次只能将一个设备上下文连接到一个窗口)

你可以让他们有单独的窗口。 虽然这可能会引起问题,尤其是如果他们都需要全屏。


你应该在同一个程序中将你的迷你游戏和你的主游戏分成不同的类。 每个类都应该有Update,Draw,Initialize等方法。 然后,你应该有一个主控制器来调用这些方法一次只有一个游戏活动(这也可以只是在你的主要游戏类)。

您可以为每个游戏/迷你游戏使用单独的内容管理器,以便在完成每个游戏/迷你游戏时为其卸载内容。

考虑一下Game State Management示例。


要回答您的编辑:

是。 这样的插件系统应该可以正常工作。

请注意,一旦加载到进程中,您将无法在不卸载整个进程的情况下卸载插件DLL,尽管您可以通常的方式卸载它的资源。 (请注意其他人遇到这种情况:您可以卸载时使用AppDomains,但我相当肯定,这将无法与XNA很好地玩。)