学习游戏程序设计
Start
这篇文章是写给编程初学者和完全不懂编程的小白的,目的是希望能通过这篇文章, 让大家知道一下游戏大概是怎么工作的,游戏中的画面是怎么显示出来的和游戏程序的大概结构。
下面会找一个github上的h5塔防游戏举例子。这个游戏是我在准备毕业设计时候遇到的,当时好奇就花了点时间研究了一下
游戏的工作流程
几乎市面上所有常见游戏都是通过如下循环进行的
1 | 游戏启动 |
所谓的玩游戏的过程也就是游戏通过设备(键盘, 鼠标, 屏幕触控, 话筒)等形式获取到玩家反馈数据对游戏进行更新, 不断重复该过程, 直到达到游戏结束条件为止
游戏画面的显示
我们看到的游戏的画面, 不管多酷炫, 归根到底可以看做一系列的连续播放的图片, 而每张图片我们又可以看做是一个固定分辨率的色彩数组。
拿 1080*1920 分辨率, 60fps 的某一款游戏来说, 就是1s中给你播放60张1080p的图片给你看,那游戏怎么知道该给你看什么图片呢 ?
图片的内容可以看成是一个 1080(宽) * 1920(长) * 4(RGBA)
的数组, 只要把这个数组发送给显卡, 显卡就知道应该怎么显示, (为什么要用一维数组是因为基于性能考虑,一位数组的处理效率比高维数组要高)。
游戏渲染的过程, 可以看做是根据用户反馈计算这一些列需要显示的数组的过程
游戏的通用结构
从结构上说, 任何游戏, 实质上都是一个不断循环的程序, 当画面的处理和输出速度达到人眼视觉暂留的极限时(一般在30fps以上),人就分不出来是不是真的实时了, 以此来模拟实时的效果, 早期的胶片电影使用的也是类似的原理
任何游戏理论上都可以套用以下过程, 使用伪代码描述:
1 | load( config ); // 加载游戏配置 |
游戏的实质就是根据与用户交互, 不断的修改参数对页面进行渲染, 再接受用户输入, 这整个循环称为游戏的主循环。下面我将对一个简单的小塔防游戏进行分析, 来说明一下一个简单游戏的内部组成和功能实现
TF游戏
ps: TF只是一个游戏名字
游戏地址
游戏地址: https://github.com/oldj/html5-tower-defense
TF中的主循环做的事情
tf既然也是一个游戏自然就遵循上面所说的基本规则,
tf游戏中的主要过程如下
- 响应用户的点击事件
- 根据用户的输入和触发的事件,更新游戏对象数据
- 然后根据对象进行渲染
- 判断游戏输赢(是否达到结束条件)
TF游戏中的各种子系统
tf游戏虽小,但是却也是一个比较完善的游戏, 内部也是有许多的子系统构成
基本对象系统
对象系统是tf的基础, 游戏中的所有会运动的怪物, 炮塔, 甚至包括文字, 按钮 都是对象系统的成员。但是,这些对象又具有一定的层级关系,游戏中的所有对象可以根据继承关系形成一个树状结构,之所以要建立对象系统是为了更好地以面向对象的形式来构建游戏,这种开发方式有助于降低开发难度。
基本的对象系统是承载游戏数据的主要对象,各种游戏参数基本都表现为各种对象的各种属性,对象系统对上层的渲染系统提供渲染参数, 可以通过渲染系统把当前游戏运行状态可视化的显示出来。
事件系统
事件系统是用户和游戏系统进行交互的窗口, 用户的所有操作都作为事件的形式被游戏所捕获。事件系统的功能主要是:收集用户的输入,提供事件来触发对数据的处理,实时的更新对象的数据。
事件系统是控制游戏进程和与用户交互的重要通道,事件系统在游戏中起到触发器的作用, 告诉游戏中的对象,什么时候用户做了什么事情,你们需要做些什么。一般来说事件系统会用一个具有优先级的队列来实现
渲染引擎
tf中的渲染系统主要负责根据对象参数渲染对象的UI效果
画面中看到的小怪物,子弹, 文字, 建筑都是渲染系统来负责
因为tf中没有用到图片,所有怪物和防御设施都是使用canvas绘制出来的, tf中的渲染系统承担的工作要更重一些
渲染系统是游戏的核心功能之一
渲染程序的运行依赖于当前游戏中的各种对象和参数状态
用户的某种动作触发了事件之后,对应的对象的参数和状态会进行重新计算
新的对象需要有渲染引擎来进行绘图和显示
渲染系统是游戏内部状态的展示窗口, 核心功能是讲当前游戏内部状态以友好的方式呈现给用户
物理引擎
物理引擎在游戏中主要充当工具箱的作用, 属于渲染系统中的基础组件
主要的功能像寻路算法
, 碰撞检测
等都属于物理引擎的范畴
物理引擎可以赋予对象真实世界物体的各种效果
负责计算渲染系统需要的各种描述状态的参数数据
物理引擎是我们衡量一个游戏等级的重要依据
目前还没有游戏能实现完整的模拟现实世界的物理引擎
更加复杂的化学引擎也目前没人能实现
理想的游戏引擎是能按照现实世界的各种粒子特性
原子级的模拟整个现实世界,但是这在未来数百年显然是不可能的
音频/视频系统
其他大型游戏一般还有会有音频和视频系统来增强用户的游戏体验
不过这个游戏并没有包含这一部分
资源系统
大型游戏中的音频
,视频
,文件
,内存
,I/0设备
等资源都需要进行管理
一般会自己实现一套资源管理机制