比如用上文提到的比较底层的框架(比如 SDL)来制作游戏然后自己写个简单的地图编辑器、粒子系统、存档文件保存读取系统或者菜单系统 。虽然你做的这个跟专业引擎制作的没法比,但有一天你回到引擎里再来看待一些问题会有不一样的解决思路 。
注意数据结构的应用数据结构刚学习时候会陷入这东西在游戏开发中能干什么的疑惑之中 。除了比较常见寻路用到图和网络编程的消息队列,其他的在我一开始学习数据结构时候都一无所知 。
堆栈的应用:在处理菜单时候比如进入设置菜单时候把新菜单压栈操作,返回时候出栈销毁即可 。在游戏场景进入到一个房间时候可以把当前游戏场景暂停然后把新的房间场景压栈 。
队列的应用:在一些需要缓冲输入时候(比如格斗游戏)可以使用队列来控制输入操作 。在一些技能系统比如一回合有8个体力槽玩家来组合攻击 。在制作回放系统时候也可以使用队列来制作 。
树的应用:基本是当你需要面对分支而且每个分支都有分支时候需要考虑 。典型的比如剧情或者对话树,在节点下有很多子物体,子物体又可以有很多子物体时候也是它的应用场景 。
图的应用:在可视化流程控制,有限状态机和导航系统都可以找到它的影子 。
游戏开发设计模式应用这个其实有专门书籍进行阐述,我也只是班门弄斧而已 ,我只谈论几个对于我初学时候比较有收获的 。
单例模式:在很多人刚开始接触游戏引擎时候都会面临一个问题是场景切换不销毁数据,不推荐的做法也是一些初学者会犯的是把数据保存到本地,然后下个场景再读取 。这种直接进行读写操作是不可取而且当你要保存的是一个游戏对象(GameObject)时候就没办法了(当然其实也可以序列化对象保存到本地但仍然不可取) 。这个时候比较可取的就是保存到一个全局的静态对象/变量上,这就引入了单例模式 。还有比如一些系统只能有一个入口不允许随便使用不然会出错,比如典型的文件 IO 和控制器输入控制 。
数据驱动:在 Unity 的 ScriptObject 中明显就是数据驱动,其核心思想就是改动数据而不必改动代码 。而当你要使用数据驱动时候一定要分清楚什么可以硬编码什么可以数据驱动,配置太多的话是很影响开发效率和可阅读性 。
降低指针跳转消耗:我觉得这个也是 ECS 提出的原因之一,在大型游戏中面对的是巨量的游戏物体,这个时候游戏物体中又有各种指针跳转的话造成的性能消耗就不能忽视了 。所以在写代码时候要注意降低指针跳转,尽量让内存连续分布,比如使用结构体和数组 。当然内存连续分布也可以减少内存碎片 。
原型模式:这个一开始好像是在 Cocos2d-x 里面看到过,一个接口来实现克隆当前对象 。在实际游戏中其实也挺常见,比如 GBA 的木叶战记中,鸣人使用影分身可以生成一个新的人物但是攻击力和血量减半 。在 Unity 中 Prefab 从 Project 窗口拖动到 Scene 中时候也是使用类似思路(应该吧) 。
注意代码整洁这个更多是经验性的东西,我也难说做得很好 。保持代码可读性是为了日后你或者别人回来看代码能看得懂 。保持函数的单一职责很有必要,当你发现有些代码重复写了几次就应该思考这是否应该放到一个函数中 。你必须明白的是 Bug 总是会有的,总有一天你或者别人会重新看这些代码,如果在写的时候稍加注意,后期的维护和复用就会相对简单轻松 。
具体可以看下代码大全、代码整洁之道和这个视频 。
最后,制作游戏很有趣,写游戏代码也很开心,希望你也能享受游戏编程的快乐!
推荐阅读
- 制作签名的软件 个性签名软件代码
- c语言编程软件下载 编写c语言的工具软件
- 下一站江湖地图怎么样 下一站江湖游戏地图画面一览
- 游戏模拟器ios推荐 比小鸡模拟器更好的模拟器
- 加盟游戏代理加盟多少钱 手游代理平台加盟
- 下一站江湖多少钱 下一站江湖游戏售价攻略
- 手机电脑模拟器 用手机玩电脑游戏的模拟器
- fc模拟器游戏大全 游戏模拟器排行榜
- scratch游戏脚本大全 scratch简易小游戏教程
- 风行游戏好玩吗 风行游戏推荐
