如何创建一个具有状态的游戏菜单

5
我一直在寻找制作游戏菜单的示例,例如我想让应用程序打开到菜单。从那里,它将打开“玩游戏”、“显示积分”、“退出”。到目前为止,我看到的所有内容都是弹出式菜单。
所以我要找的答案是关于使用“状态”的,比如暂停状态、游戏状态等等。但我无法弄清楚应该如何布局或如何使用它们,也不知道如何创建MenuState,而且无处可找到示例。
使用glut和freeglew。

1
你是在问如何使用OpenGL绘制文本吗?这里有一个你可以使用的函数:https://dev59.com/6nRB5IYBdhLWcg3wuZQ1 - nurettin
嗯,是的也不是。我之所以问,是因为我听到很多关于使用“状态”的说法,比如暂停状态,游戏状态等等...但我无法弄清楚它应该是什么样的布局,以及它应该如何使用...而且我无法在任何地方找到一个例子。 - Glen Morse
你是在问如何停止游戏界面,显示菜单,当菜单消失后再次启动游戏界面吗? - nurettin
是的,那将是其中一个“状态”。 - Glen Morse
1个回答

6

GUI实现

基本想法是在相机前创建一些纹理四边形,当用户单击屏幕时,将其转换为世界空间,并找出他们单击的四边形(因此也就是点击了哪个按钮)。在这里,你可能会发现正交投影是一个不错的选择。

具体的实现取决于你如何与键盘和鼠标进行交互(GLUT、SDL等)。

你可能需要考虑使用GUI框架,例如CEGUIFLTK或类似的框架,因为这通常是一个复杂的任务。

游戏状态

游戏状态是一种简单的抽象方式,可以将用户在游戏中的经历抽象成节点。它允许你将游戏的不同区域建模为DFA上的节点或使用栈。然后,你可以通过创建GameState对象继承的api来实现它。然后,你可以通过从这个接口派生类来实现不同类型的游戏状态。

接口本身可以提供方法,以使状态在被激活时或类似情况下被通知。

如果使用DFA管理状态,则有一个代表DFA当前节点的活动状态。然后,该状态可以基于游戏输入(例如在菜单中点击播放按钮等)选择一个新状态进行转换。

如果使用栈来管理游戏状态,则情况略有不同。首先,将菜单状态推入栈中,然后当选择某个级别时,也可以将其推入栈中。当级别结束时,状态从堆栈中弹出,用户返回到主菜单状态。

这里有一个简单的游戏引擎示例:https://bitbucket.org/iwillspeak/thulium/src。GameState是游戏状态的基类。这些由GameStateFactory进行管理。SampleState是一个示例游戏状态实现。


我正在使用GLUT。但是也许需要更清晰地表达问题。我会更新。 - Glen Morse
你知道任何关于这方面的例子吗?但是,是的,你的回答正是我所说的。 - Glen Morse
1
这不是完美的,但也许可以帮到你:https://bitbucket.org/iwillspeak/thulium/src。看一下GameState.h和GameState.cpp。 - Will
似乎这不是一个问题..很遗憾因为你应该得到答案的荣誉...我猜关闭它的人不知道什么是状态,所以他们投票关闭了它。 - Glen Morse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接