By Long Luo
从小到大,虽然玩过的游戏不少,但是从写程序开始,目前为此仅仅写过2个游戏。其一是2011年在MTK平台下写的贪食蛇,其二是2010年在嵌入式开发板上写过一个迷宫的游戏。第一个代码量大概有3000行左右,第二个有2000行左右。
这2个游戏都很简单,而且网上有很多现成的例子可供参考,因此难度也比较低。
这2天把拖延了好久的《Android应用开发揭秘》的游戏引擎的那一章看完了,收获还是很大,在此写一篇读书笔记。
关于Game Engine,我能想到的几个问题:
- 游戏引擎是什么?
- Game Engine是为了解决什么问题?
- Game Engine的架构是什么?
- 如何设计一款游戏引擎?
- 游戏引擎包含哪些模块?
下面就来探讨几个问题:
一、Game Engine是什么?
游戏产业在全球来看是一个很大的产业,一款游戏大作包含了非常多的元素。游戏涉及到剧情、人物、任务、关卡、地图、画质、美术、音乐、网络等多种元素。开发一款游戏实际上需要耗费非常多的资源,据说North Star的《GTA V》耗资几亿美元。正因为如此,在开发项目过程中,尽可能复用之前项目成功的东西就非常重要。
一款游戏中,Game Engine直接控制着剧情、关卡、美工、音乐、操作等内容,将游戏的所有元素捆绑在一起。
一般来说,一款Game Engine需要包含以下模块:
- 基本框架(渲染、逻辑、物理 等等各部分如何组装)
- 资源管理
- 渲染
- 基本逻辑(网游还要解决逻辑的同步问题)
- 物理(有时候和逻辑合并)
———–分割线,以下是重要但较为独立的部分————-
6. **UI**
7. **音乐音效**
8. **网络**
9. **脚本**(有些类型的游戏引擎需要脚本和逻辑的关联性非常强,有些脚本则比较独立)
二、Game Engine为了解决什么问题?
Game Engine实际上有效的减少开发者编写程序时的冗余劳动,同时增强游戏的可移植性。
Engine就是游戏的框架,我们需要往框架中填充内容就可以形成一个游戏。
引擎,就是一系列的工具和生产链,像Unreal 3,Unity这样的成熟引擎,用起来非常方便,就是因为它的关卡/场景编辑器十分宜用,支持多种脚本语言。这类引擎运用恰当的话,理论上能将关卡调试和物件流水线的大部分工作从程序员那里完全移出。
三、Game Engine的架构
游戏 = 引擎(程序) + 资源(图像、声音、动画等)
目前的Game Engine的架构都是Model-View-Controller架构,逻辑和显示分开,由一个逻辑控制流来协调Client的请求和Server的行动。
- View: 负责界面回执
- Controller:处理工作流程的创建和种植,用户输入,各种事件的处理
- Model: 模型、逻辑,程序的功能实现
消息循环->更新数据->绘制各节点 这是绘制的基本结构基本不会有大的改变。
各种引擎的变种很大部分是在游戏逻辑上的封装。脚本也好,直接写代码也好。比如较为古老的数据与函数分离,以C语言为代表。大行其道的类结构。以c++为代表。以及现在光环日耀的CBSE,基于组件的架构