在 C 语言中使用 SDL2 实现菜单/场景的好方法是什么?



我正在使用SDL2制作游戏。我正在测试菜单,但一个bug让我觉得我必须改变我的方法。我曾经为每个菜单设置一个单独的while循环,但现在我尝试着为整个游戏设置一个单独的循环,根据变量的值来处理不同的菜单(嵌套循环变得难以处理)。我想了一会儿,但菜单上各种各样的需求给我带来了很多麻烦。如果有人能给我一些好的建议,下面是它所需要的:

  • 有区别的事件处理(一个菜单应该处理玩家的移动键,另一些处理其他事情…);

  • 一种在菜单停止运行时释放用malloc()声明的所有变量的方法;

  • 每次菜单循环开始前只运行一次的初始化。

我希望有人能给我一个很好的方法与伪代码或只是正常的解释,提前感谢那些谁会帮助!

你可以考虑这样做:

每个菜单定义自己的struct menu对象,该对象至少包含以下三个函数指针:

  1. 一个指向函数的指针,该函数在菜单打开时被调用,因此可以为菜单的数据分配内存,并且可以初始化数据。
  2. 指向一个函数的指针,该函数在菜单关闭时被调用,以便释放菜单分配的所有内存。
  3. 指向菜单输入函数的指针,该函数在程序接收到输入时被调用。如果菜单处理输入,这个函数将返回true,如果它不处理输入,则返回false,因为它与菜单无关(例如,如果输入是玩家移动的键)。

你的程序应该有一个指向struct menu的指针,它总是指定当前活动的菜单,如果没有活动的菜单,则指向NULL。每当程序的主循环接收到输入时,它就调用当前活动菜单的输入函数的函数指针。如果菜单的输入函数返回true,那么游戏的主循环将忽略输入,但如果菜单的输入函数返回false(例如,如果输入是玩家移动的键),那么游戏的主循环将处理输入本身。

相关内容

最新更新