这是我参与「第四届青训营 」笔记创作活动的的第22天
游戏发展历史
广泛意义上的游戏
最广泛的定义
一种有组织的玩耍,一般是以娱乐为目的,有时也有教育目的
在英语中,体育比赛( Game )也是游戏,只要其活动本质带有目的、规则、挑战和互动,我们都可以把其归为游戏。
举个例子
拔河作为体育活动具有一定的规则约束、对参与者的体力和策略选择有要求,双方具有对抗性和互动最终通过胜利来获得心理上的愉悦,因此可以定义为游戏。
我们把范围缩小一下:电子游戏
在游戏中,玩家依托电子设备(如电脑、游戏机、手机等)进行交互。
- 1970-1980:街机家用游戏
- 1980-1990:街机黄金时代、早期网络游戏、LCD掌机游戏
- 1990-2000:街机衰退、掌机降临、3D出现
- 2000-2010:网络游戏崛起、游戏控制方式变革
- 2010-2020:高分辨率、开发成本、移动端、小游戏
狭义上的游戏
狭义上的游戏即通过游戏引擎制作的电子游戏
游戏的分类:根据玩法进行大类分,再经过小类细化。
前端场景下的游戏开发
开发链路和角色
游戏开发的团队分工
组建一个最小但最完整的游戏开发团队只需要3个人:策划、程序、美术。
当然,能力足够强的话可以作为独立开发者。
开发角色和链路
为什么要用游戏引擎
那为什么要用游戏引擎呢?
因为你想要的它能够给你一套完整的实现方案,不需要你再自己去拼凑、封装,让你花更少的时间做出更好的效果,特别是关于渲染效率和性能优化。
它提供游戏开发时需要的常见功能:引擎会提供许多组件,使用这些组件能缩短开发时间,让游戏开发变得更简单;专业引擎通常会能比自制引擎表现出更好的性能。
游戏引擎通常会包含渲染器,2D/3D图形元素,碰撞检测,物理引擎,声音,控制器支持,动画等部分。
游戏引擎
Web游戏引擎
利用 Canvas 和 WebGL 为底层技术抽象的图像绘制库(往往还附带一些其他的功能)
Web 游戏引擎的通用能力:
●预加载:游戏中往往存在大量的静态素材,包括场景、元素、声音、动画、模型、贴图等,如果以原生 JS 进行请求,并统筹请求时间和加载的时机,将会非常麻烦。游戏引擎中的预加载引擎将加载时机、加载过程加以抽象,解决加载编码中的效率问题。
●展示与图层、组合系统:对于 Web 游戏编程而言,往往选择 Canvas 或 WebGL 作为渲染方式(大家可以想想为什么不用 DOM 作为渲染方式?)。而 Canvas 和 WebGL 作为底层的 API ,接口非常基础,需要用大量的编码来编写简单的展示。而且图形之间没有组合和图层,很难处理元素组合和图层问题。渲染引擎和图层、组合系统应运而生。
●动画系统:动画往往被分为缓动动画和逐帧动画,这里讨论缓动动画系统。缓动动画系统在原生 JS 中需要搭配帧渲染进行考量而进行书写,代码量和思考量巨大,抽象程度低,所以需要游戏引擎动画系统。
音效和声音系统:游戏相较于普通的 Web 前端而言需要更加立体、及时的反馈,声音和音效是反馈的重要组成部分。所以声音和音效系统往往包含了声音的播放、音量、截止、暂停等功能的集成。