用于XNA 4.0中的UI开发的书籍

时间:2012-03-29 06:22:48

标签: c# user-interface xna-4.0

我希望为我正在开发的游戏开发一个基本的(最初的)自定义UI。它将用于游戏本身以及modding工具。我查看了游戏状态管理示例,但它只是提供了一堆代码,没有真正解释为什么事情正在发挥作用。我的学习风格是这样的,在我能够理解如何理解某些东西之前,我必须知道原因。这就是为什么我想获得一本书,而不仅仅是下载另一个代码示例。

我可以创建UI对象的可视部分而没有任何问题(简单的部分),我知道如何使用它们(使用事件处理程序)但我很难连接事件通过按键或鼠标单击XNA中屏幕上的按钮触发的处理程序。

对书籍或在线教程/讲座的任何建议都会很棒。代码示例虽然很受欢迎,但如果没有附带的教程或书籍,则不是很有帮助。另一方面,没有源代码的教程或书籍对我来说也不是很有用。另外,请不要使用ziggyware教程。我爱他们,但他们失望了:(

编辑:

我想到的另一种方法(但不太喜欢)是当菜单弹出时,它会暂停游戏(如果需要)并显示菜单。然后,只要单击鼠标,它就会检查鼠标单击的坐标并检查它们是否与其中一个菜单项相交。这是一种可能性,但它似乎太乱了,我觉得我应该能够利用事件处理程序。事实上,我知道我可以,因为游戏状态管理示例使用它们,虽然我不清楚如何。

链接

使用教程here我能够理解如何在xna中使用自定义控件的事件。我在第3部分得到了最多的帮助,它谈到了制作按钮。然后我看到它在Game State Management示例(InputState)中引用了一个类。我再次阅读了InputState以及在第三部分中使用它的代码,我觉得我理解得很好。

1 个答案:

答案 0 :(得分:3)

正如我在评论中所说,你可以扩大对游戏中GUI的搜索范围。我不知道任何XNA特定的书籍,所以下面是从GSM样本中获取的一般想法的快速概述(我没有它,所以类名等可能有点偏离)。

另见:Making Sense of the GSM Sample在另一个堆栈交换网站GameDev上 另请参阅:GSM示例附带的文档(MS Word)。


概述:

一种运行良好并且由GSM样本使用的一般方法是一叠屏幕的概念。

屏幕定义用户当前可以看到的内容,例如选项屏幕或帮助屏幕或游戏屏幕。

管理屏幕:

GSM的经理ScreenManager管理要绘制的屏幕和时间 通过这种方式,它可以管理游戏的“状态”。

游戏的基本状态由一堆屏幕定义。当用户钻入选项/菜单项时,它可能会创建一个新屏幕并将其推入堆栈。当用户按下它时它将退出。

这里的关键是你只渲染顶部屏幕(GSM实际上渲染的不仅仅是顶部屏幕,以支持屏幕转换,即淡入屏幕等)。输入仅由最顶层的屏幕处理。

管理输入

您有一个基类,所有屏幕都继承自 - GameScreen。这定义了RenderHandleInput等各种方法。 ScreenManager会在几个屏幕上调用Render(如果完全转换则可能是前一个屏幕,如果是中途,可能会调用前2个),而HandleInput仅在顶部屏幕上调用。{/ p>

BaseScreen可以简单地实现处理所有屏幕共有的输入,例如,当用户按下控制器上的B或键盘上的Esc时,它可能会退出屏幕。您可能希望在此时引发一个名为BackPressed的事件。在GSM示例中,他们没有事件,他们只有一个OnCancel虚拟方法,它位于MenuScreen抽象类中,而不是基类。它可以通过默认退出当前屏幕或者通过做其他事情(例如暂停游戏)来导出屏幕类来处理他们想要的方式。

MenuScreen是更复杂的基本屏幕的一个相当好的例子,允许用户选择项目(可能引发ItemSelected事件,或调用OnItemSelected虚拟方法) 。他们使用一个名为MenuItem的小类来管理单个菜单项。屏幕管理处理输入(在HandleInput事件中)以捕获DPad /箭头按键等以处理选择不同的项目。