在这里插入图片描述

在这里插入图片描述

五、GameManager游戏主体管理器实现

游戏主循环框架

5.1异常处理

​ 在程序发生运行时的错误(注意:而不是编译期的错误),我们可以通过一些方式,将运行错误抛出,以便我们排查代码 bug

在这里插入图片描述

​ 这些返回值,还是比较有用的,因为在初始化时,我们是需要知道哪些库初始化成功 or 失败了。因此,在我们的游戏开发中,我们是需要将这些情况进行考虑,以便我们处理异常代码


5.1.1定义运行时断言

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


​ 一般来讲,程序是不会出现 SDL、游戏窗口创建失败等库异常的,但在出现这些问题后,及时的通过这些代码所抛出异常信息,就可以很方便的使我们精确定位异常位置


初始化 SDL

在这里插入图片描述


初始化 IMGTTFMIX

在这里插入图片描述

在这里插入图片描述


错误纠正:

在这里插入图片描述


初始化音频库

在这里插入图片描述


5.1.2启用SDL - IME用户界面

在这里插入图片描述

在这里插入图片描述


5.1.3窗口与渲染器

创建运行窗口

在这里插入图片描述


创建渲染器

在这里插入图片描述


在这里插入图片描述

在这里插入图片描述


5.2游戏主循环

构造函数中:

5.2.1事件创建、拉取事件

在这里插入图片描述


错误纠正:

在这里插入图片描述


5.2.2主基调代码

在这里插入图片描述

也不要忘记返回值

在这里插入图片描述


在这里插入图片描述


5.2.3主函数

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


后续的主逻辑,基本上都在 GameManager 这个类中实现


5.3程序退出逻辑

析构函数中:

在这里插入图片描述


​ 即使,我们不去写析构函数中的析构对象,程序运行结束后,也会自动关闭(或销毁)我们创建的这些资源库(或窗口、渲染器等)(整个线程进行结束,系统会回收这些运行程序资源),但我们养成这样的思维,每次资源申请完毕后,考虑其应在什么阶段去被释放,这是一个非常好的习惯。

​ 在开发过程中,它可以避免掉很多类似 内存泄漏 等问题,一些资源的生命周期没有那么长,我们需要在程序内部把它释放掉 (eg:子弹销毁,或敌人死亡,我们就需要把其从游戏中移除掉,而不是当整个进程结束、整个游戏结束后,才将其消除)

​ 所以,我们就需要养成这种习惯,对资源的释放时机多加观察(什么时候申请,以及什么时候释放,将来尽量 避免内存泄漏 这样的问题)


在这里插入图片描述

🌟 各位看官好我是工藤新一¹呀~

🌈 愿各位心中所想,终有所致!

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐