这是我参与
「第四届青训营」笔记创作活动的第13天
游戏定义
最广泛定义: 其活动本质带有目的、规则、挑战和互动的,都能归类为游戏
- 传统游戏:体育比赛、运动等对于参与者有策略选择或规则要求,双方具有对抗性和互动
- 电子游戏:具有游戏的特征但是玩家依托电子设备进行交互的
- 早期街机2D游戏
- 3D游戏、网络游戏
- 主机游戏
- 移动端、小游戏
狭义定义: 通过游戏引擎制作的电子游戏
主要类型划分
前端场景下的游戏开发
开发团队
一个游戏项目的开发最核心的分工在于:策划、程序、美术
开发过程
主要的流程:
立项 ->原型(DEMO)->体验阶段(A测、B测)->上线运营
为什么要使用游戏引擎
游戏引擎如同框架,能够减少重复代码的编写,提高开发效率,游戏引擎能提供最大的好处就是渲染
引擎会提供许多组件,能缩短开发时间,让游戏开发从复杂变得简单;
许多游戏引擎包含 2D/3D图形元素处理、碰撞检测、物理效果、静态资源、控制器支持等功能
游戏引擎
常见的游戏引擎:
- Unreal 虚幻引擎
- Unity3D
- Source 起源引擎
特定类型的游戏引擎:
-
The NVL Maker - 文字游戏制作器
无需代码,只要有文本和一些配置就能生成
有个能适用于前端的库(AVG.js Project)- 内核基于PixJS渲染引擎 -
RPG Maker - 角色扮演游戏制作器
使用少量的代码就能搭建关卡,适合代码能力不强又想实现自己独特想法的开发者
Web游戏引擎
利用Canvas和WebGL为底层技术抽象的图像绘制库
Web游戏引擎通用能力:
-
预加载:将加载时机、加载过程加以抽象,解决大量静态资源的请求时间和加载问题,解决编码中的效率问题
-
展示和图层、组合系统:使用底层API需要大量编码编写简单的展示,而且图形间没有组合和图层,很难处理元素组合和图层问题,渲染引擎能够简化关于界面的处理
-
动画系统:[缓动动画 | 逐帧动画] 动画在原生JS中需要搭配帧渲染进行考量与编写,难度巨大,因此引擎提供动画系统
-
音效和声音:包含了对音频资源操作方法的集成
功能引擎
一个大型游戏引擎往往都由许多小功能的引擎组成,包含:
渲染引擎、物理引擎、UI系统、动画系统、声音系统、粒子系统等,最重要的是物理引擎和渲染引擎
Web游戏引擎渲染过程
Pixi.js渲染引擎为例:
-
创建一个Render渲染器,获取view(一个canvas对象),添加到DOM Tree中;或者指定Dom树中的canvas对象
-
在Mainloop(主循环体,用于界面展示)中调用Render.render()并传入DisplayObject作为根节点开发渲染
-
从根节点开始,已zIndex为序从小到大进行深度遍历,对每个场景进行渲染,再由后往前把场景绘制
render(displayObject,renderTexture,clear,transform,skipUpdateTransform){
//应用变换(GPU级别)
this.projection.transform = transform;
//渲染纹理绑定
this.renderTexture.bind(renderTexture);
//执行元素渲染,将数据添加到BatchRendering中
this.batch.currentRender.start();
//执行render绘制方法
displayObject.render();
this.batch.currentRender.flush();
//清空
this.projection.transform = null;
}