mirror of
https://github.com/cheetahlou/CategoryResourceRepost.git
synced 2025-10-17 23:43:44 +08:00
mod
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
<audio id="audio" title="第28讲 | 热点剖析(一):HTML5技术是如何取代Flash的?" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/4b/d7/4bf6f809c500e75aebb3afd537b3eed7.mp3"></audio>
|
||||
|
||||
本周开始,我将会在**每周六**更新一篇“热点剖析”,阐述我对2D游戏开发之外的热点,比如HTML5游戏、移动端游戏、AR和人工智能在游戏领域的应用,以及我对微信小游戏、移动游戏、独立游戏开发者的一些观点和看法。
|
||||
|
||||
我已经为你讲解了核心的开发知识,对于这些相对热门领域的知识,你可以根据兴趣进行选择学习。
|
||||
|
||||
本周及接下来两周的周六,我会依次为你介绍HTML5游戏,以及[如何选择HTML5的游戏引擎](https://time.geekbang.org/column/article/9702),并带你编写一款H5小游戏。
|
||||
|
||||
从前几年开始,H5这个技术就开始蓬勃发展。不管是懂行的还是不懂行的,都开始以“H5”这个字眼来描述产品。比如老板会说“我们就做个H5的页面吧”,或者“这个游戏是H5的吗”。很多人已经把H5等价于“手机端页面”了,这样的理解显然是错误的。
|
||||
|
||||
那么H5究竟是什么?它的优点在哪里?为什么现在大家都在谈论H5?你真的知道H5是什么,并真的深入理解了它吗?
|
||||
|
||||
## Flash是什么?
|
||||
|
||||
首先,在说H5之前,我想先介绍一下Flash技术。
|
||||
|
||||
**Flash是由Adobe公司开发的一种富媒体技术,起初是一种放置在浏览器中的插件,填补了当时HTML页面平淡的空白,增强了网页交互的能力。**你可以在Flash中做出任何东西,也可以访问本地电脑中的东西。后来,Adobe公司推出了播放器,在电脑上不打开浏览器,也可以观看或者游戏Flash程序员编写出来的产品。乃至今日,依然有大量应用于Flash的富媒体应用,比如视频的播放,比如独立的小游戏,比如网页游戏,甚至桌面应用,都是使用Flash开发的。
|
||||
|
||||
虽然Flash拥有大量优点,并在当时弥补了网页端的很多不足,但是Flash的缺点也是很明显的。
|
||||
|
||||
首先,**它的浏览器插件的运行效率并不高,而且访问电脑资源也很不方便,导致很多程序员在开发的过程中出现许多的问题**,就算成功发布了一款Flash应用,浏览器也会被Flash插件拖得很慢,电脑会因此变得很卡,所以H5技术出现后,很多人就开始转投到H5的门下。
|
||||
|
||||
另一方面,由于Flash技术掌握在Adobe公司下,一家独大,所以从商业角度讲,很多大公司并不会坐视不管,就开始从Flash中抽取内容并制定公有的Flash规范,到了后面就添加到了H5规范下,成为大家都能掌握的规范。
|
||||
|
||||
谷歌苹果等大公司都不支持Flash应用,所以在大公司的压力下以及现在H5的流行,Adobe公司决定在2020年终止Flash技术的提供。
|
||||
|
||||
## H5技术究竟是什么?
|
||||
|
||||
有了这个铺垫,我们再来看看H5技术究竟是什么,它为什么会取代Flash。
|
||||
|
||||
首先,H5大量应用在手机端的网页上面,但这并不等于“H5等于手机网页”,因为普通的HTML页面也可以适配手机端屏幕。
|
||||
|
||||
H5全称是HTML5,HTML是超文本标记语言的首字母缩写。而HTML4.01的标准在1999年年底发布。HTML5的草案,前身是网络应用1.0(Web Application),而HTML5的第一份草案于2008年1月月份公布,定稿是在2012年的年底。
|
||||
|
||||
在H5标准出现后,各大浏览器纷纷开始支持H5,比如火狐、谷歌的Chrome、IE9、苹果的Safari,Opera等等。事实上,**H5技术很大程度上是为了移动平台所设计,能在移动平台支持多媒体,当然取代Flash这是顺理成章的事情**,但是,H5技术并不等同于移动平台网页,我们在很多的PC端的网页也能看到HTML5的技术。
|
||||
|
||||
## H5技术有什么新特性?
|
||||
|
||||
H5技术拥有很多最新的特性。
|
||||
|
||||
在**语法**方面,HTML5的语法给了网页编写程序员拥有更好的语法结构以及更加丰富的标签。比如,video标签就可以直接在H5页面中嵌入播放器。H5也支持更多的**设备兼容**,比如可以支持摄像头,支持麦克风(移动端的或者电脑端的都可以)。
|
||||
|
||||
H5也支持**本地存储**的功能,我们可以使用H5技术来开发网页app,这些都来自本地存储的缓存技术,所以H5网页的**载入速度**会比传统网页更加迅速和便捷,连接也变得更快。H5支持多媒体这是必然的,包括音频、视频、摄像头等功能,事实上使用H5技术的多媒体技术已经完全可以取代Flash技术了。
|
||||
|
||||
在**编程**方面,以前我们需要跨域的技术,在H5中,可以使用XMLHttpRequest来解决跨域问题。而且H5页面一经修改就能直接更新上去,基本上刷新页面就能看到效果,而如果使用Flash来做,需要进行编译和发布,并且替换Flash页面,才可以看到Flash应用的更新,从时间效率讲,H5技术又是技高一筹。
|
||||
|
||||
另外,如果有专业的SEO人员,也可以很方便地通过H5来做SEO优化,做网站的索引和搜索引擎的抓取优化工作,这在Flash来说几乎是不可能做到的工作。
|
||||
|
||||
## 用H5编写游戏有什么优点?
|
||||
|
||||
使用H5技术编写的应用和游戏,可以很方便地嵌入到苹果或者安桌的App中。这种方式可以免去原生开发两套App的麻烦,只需要编写一套类似App的H5页面,然后使用类似WebView的方式来嵌入到原生应用中。
|
||||
|
||||
由于**H5页面可以随时更改**,所以现在苹果商店对于H5内嵌应用的审核比较严格,所以H5页面必须做得好,而且逻辑流程都不能有问题。所以在H5发展的阶段,有很多声音说,H5除了取代Flash,还会取代App,事实上这是不可能的。虽然H5取代Flash已经毋庸置疑,但是H5取代原生App还是有很多的掣肘,比如H5只能编写轻量级的App,如果需要那种画面效果特别好的App,或者对设备进行深层次的操控,那就只有原生可以办到了,所以现在有许多的App开发,都选择H5和原生混合开发,这样会减轻一定的工作量,并且在实现其他深层次的功能的时候也能使用原生代码。
|
||||
|
||||
**用H5比Flash编写游戏更快速,占用资源也更少**,所以以前利用Flash技术编写的游戏,现在都改成H5技术编写,当然H5编写的游戏仍然比不上原生编写的游戏。毕竟原生有对底层的操控能力,直接而且快速,而H5毕竟需要通过浏览器的解释和渲染,所以它的速度基本取决于浏览器,代码优化地再好,也无法直接穿过浏览器这一层去做事情。
|
||||
|
||||
所以,用H5编写的游戏,如果是在电脑端,我们可以编写大一点的网络游戏,因为电脑的资源能随心所欲地利用;而如果在手机端,H5技术适合编写小型游戏,比如电商领域、推广平台等营销类的小游戏,再比如玩家操作不是特别复杂的游戏,比如战棋类的、益智类的、策略类的,或者静态画面比较多的游戏(比如选择一个正确答案,猜一个成语那样的等等)。这样的游戏,占用的资源不大,动态资源载入不多,移动平台也不会有太多的卡顿感,各种手机都可以适配和游戏,这样小型的H5游戏是比较适合移动平台的。
|
||||
|
||||
**H5游戏的传播能力比Flash更好。**首先Flash技术需要安装一个插件才可以使用,然而H5游戏只需要浏览器支持即可,所以从这方面讲,只需要你通过浏览器分享一个H5游戏到微信、QQ等社交软件,就可以直接进行传播,而不像Flash那样需要安装额外的东西。所以利用H5技术编写的营销工具现在占领了绝对的主流,所以才会有本篇文章最初所说,很多人认为“H5等价于移动平台网页”这样的误解。
|
||||
|
||||
## 小结
|
||||
|
||||
总结一下今天的内容:
|
||||
|
||||
<li>
|
||||
H5游戏拥有比Flash更好用更开放的规范,开发和发布也更方便,修改代码后放到网上,只需要刷新一下页面就可以看到修改的内容;
|
||||
</li>
|
||||
<li>
|
||||
另外,Flash技术需要安装一个插件,而H5技术直接在浏览器就可以呈现。所以H5技术完全替代Flash只是时间问题。
|
||||
</li>
|
||||
|
||||
现在留一个小问题给你。
|
||||
|
||||
我们都知道浏览器渲染出来的网页都是2D的页面和游戏,但是H5技术也可以编写3D视觉效果的内容。你知道H5技术所拥有的3D效果是用什么技术实现的吗?
|
||||
|
||||
欢迎留言说出你的看法。我在下一节的挑战中等你!
|
101
极客时间专栏/从0开始学游戏开发/第六章:热点剖析/第29讲 | 热点剖析(二):如何选择一款HTML5引擎?.md
Normal file
101
极客时间专栏/从0开始学游戏开发/第六章:热点剖析/第29讲 | 热点剖析(二):如何选择一款HTML5引擎?.md
Normal file
@@ -0,0 +1,101 @@
|
||||
<audio id="audio" title="第29讲 | 热点剖析(二):如何选择一款HTML5引擎?" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/64/f1/64169576d8fe46d6961c025b4e1bc2f1.mp3"></audio>
|
||||
|
||||
上周六,我详细介绍了[HTML5技术相比Flash技术的优势](https://time.geekbang.org/column/article/9298),相信你已经对HTML5技术有一个大致的了解。下周六,我会带你编写一个HTML5游戏,在这之前,我们需要先了解几种常见的HTML5游戏引擎。
|
||||
|
||||
一些比较成熟的引擎,比如Cocos2d-JS、白鹭等,它们都提供有系列化的工具,比如编辑器、IDE等周边。但是其实**大部分HTML5游戏引擎都只有图形引擎**而已,比如legend.js。而且很多HTML5引擎只是个人编写的开源引擎,所以漏洞还是比较多的。
|
||||
|
||||
HTML5游戏引擎在编写的时候,除非用DOM(Document Object Model)纯原生编写,绝大部分都是使用JavaScript编写的。但是为了考虑各种程序员的需求,现在也有使用TypeScript、CoffeeScript、LiveScript等语言编写的HTML5引擎。
|
||||
|
||||
## 几款常见的HTML5游戏引擎
|
||||
|
||||
我们现在来看一下几款常见的HTML5游戏引擎。
|
||||
|
||||
### Construct 2
|
||||
|
||||
这是一款收费的引擎,当然也有免费的版本,但是免费的版本不可用于商业用途。那么既然是商用引擎,那它一定会比免费开源的产品更加完善和易用。这里有一幅Construct 2的截图,你可以看一下它的界面。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/a7/8b/a725e6389a0636f8f0539a626de2f18b.jpg" alt="">
|
||||
|
||||
我们可以清晰地看到,这个界面类似Office的操作界面。左侧是物件的**属性**,比如长宽高等;右侧上方是物件的**层**,包括背景、物件;右侧下方是**物件选择器**,你可以选择各种物件摆放到编辑器内。这种类型的编辑器,在成熟的商业引擎中比较常见,但是由于编写编辑器的人力物力成本,所以免费的引擎一般不提供这种成熟的编辑器。
|
||||
|
||||
从**使用**角度,我总结了一下它的特点,大概有这几条,供你自己制作HTML5游戏的时候选择:
|
||||
|
||||
<li>
|
||||
可以设计任何类型的2D游戏,而且不需要编程的技能(可以由事件系统控制);
|
||||
</li>
|
||||
<li>
|
||||
使用简单的拖拽和事件系统就可以设计游戏逻辑;
|
||||
</li>
|
||||
<li>
|
||||
拥有一个物理引擎,可以用来计算运动、旋转和碰撞反映;
|
||||
</li>
|
||||
<li>
|
||||
可以在iOS、Android、Windows Store等多个平台上发布游戏;
|
||||
</li>
|
||||
<li>
|
||||
拥有很完备的文档和教程案例。
|
||||
</li>
|
||||
|
||||
在**软件**方面,它拥有一个非常直观的编辑器,可以开发高级的视觉效果,可以支持视差滚动的游戏,并且在编辑器中集成了调试器和profiler。做出来的游戏支持多人游戏,也支持2D的阴影,还支持JS SDK的插件。
|
||||
|
||||
Construct 2的不同版本,对应的功能也不相同。
|
||||
|
||||
第一个是**免费版本**的,它的使用没有时间限制,你可以使用100个事件、4个图层和2个着色器,随意导出成HTML5网页游戏,但是这些编写出来的游戏不可以用作商业用途。
|
||||
|
||||
第二个是**个人版**或者**教育版**:这个版本移除了免费版本的限制,甚至可以将项目导出至iOS、Android或者其他平台。如果你用作商业用途,可以允许你在商业用途中获得最高5000美元的收入。它可以使用调试器观察tab、profiler和事件断点,还可以制作多人游戏,在应用程序内可以嵌入内购功能。
|
||||
|
||||
最后一个是**商业版本。**所有特点与个人版本相同,但是没有上面说的那些限制。
|
||||
|
||||
**Construct 2的缺点就是相关的中文教程不是很多,需要你自己去摸索。但是它支持多平台,简单易用,还提供了很强悍的事件系统,可以不通过代码来控制逻辑,所以不需要编程知识就可以使用。**
|
||||
|
||||
### 白鹭引擎
|
||||
|
||||
白鹭引擎是我们国内自己研发的HTML5引擎。最初,它也是一套图形引擎,后来资本化之后,白鹭引擎就开始着手将引擎变成一套解决方案。
|
||||
|
||||
它不仅提供HTML5游戏引擎,也提供了各种周边工具和产品。除了图形引擎之外,它还提供了可视化编辑工具(Egret Wing)、动画制作工具(Dragon Bones)、HTML5游戏加速器(Egret Runtime)。
|
||||
|
||||
**可视化编辑工具**提供了代码调试功能。可以在文件中打断点、单步调试、跳入和跳出、查看局部变量、添加观察表达式等。当然你也可以自己编写扩展程序,可以对任何语言进行调试。可以让开发者用 Node.js + HTML 来开发IDE的扩展插件,然后实现各种提升效率的工具。
|
||||
|
||||
你还可以自定义语法高亮、智能提示和调试。它还内置了版本控制系统Git,集成命令行工具,可以同时打开多个命令行标签,执行需要的命令。
|
||||
|
||||
它甚至可以在Wing中直接运行Vim。它还内置多种主流的代码配色方案,满足大部分开发者配色习惯。开发者还可以自己编写配色扩展,你可以根据自己习惯,定制你的IDE。
|
||||
|
||||
白鹭的**动画制作工具**提供了动画和动漫的解决方案,打通了动画设计和游戏开发的工作流,也支持导出各种动画格式,提供了可交互动态漫画编辑器模式。你甚至不需要动画基础,轻松实现丰富特效。DragonBones可以输出多种格式,视频、网页、动画数据,可以用于几乎目前所有的主流游戏引擎和编程语言,提供了各个平台的运行库。
|
||||
|
||||
另外,还有一个**HTML5加速器**,这是一款支持3D的HTML5游戏加速器,解决低端机对HTML5标准支持不佳、体验差的弊端,加速器可以适配不同的系统让HTML5游戏效果媲美原生游戏,解决设备不统一,移动应用市场的设备、操作系统和屏幕的不统一的问题很严重, 已成为HTML5游戏开发者面临的难题,适配也成为美工最头痛的问题。
|
||||
|
||||
另外,越来越多的游戏和应用使用移动QQ、微信、微博等客户端作为入口。 不同客户端软件所携带的浏览器内核不同, 也直接影响HTML5游戏在平台上的表现。
|
||||
|
||||
而HTML5加速器直接支持HTML5游戏运行所需的底层功能,解决了屏幕适配和性能问题,并且也从渠道角度解决了HTML5游戏接入流程复杂, 定制化功能多的问题,实现一次接入,随时上线。
|
||||
|
||||
我们再来讲讲白鹭引擎本身。白鹭引擎支持2D、3D游戏,引擎本身采用模块化设计,egret也实现了脏矩阵方法,可以很大提升渲染性能。**脏矩阵**,简单描述就是,系统只渲染动画变化的部分,不变化的部分并不进行渲染更新。
|
||||
|
||||
**白鹭引擎本身的功能和周边工具都很强大,中文教程和论坛也比较成熟,且支持2D、3D游戏的制作,现在也支持直接编写最流行的微信小游戏。**在商业化方面,白鹭是做的比较成功的,所以现在的用户也非常多。
|
||||
|
||||
### Cocos2d-JS
|
||||
|
||||
最后,我们来说一下Cocos2d-JS。
|
||||
|
||||
Cocos2d-JS是Cocos2d-x的一个分支,只要对HTML5游戏有所了解的话,基本都听说过Cocos2d-JS,很多开发人员也会选择Cocos2d-JS来进行开发HTML5游戏。
|
||||
|
||||
根据官方说法,它跨全平台,采用JavaScript语言,可发布到包括Web、iOS、Android、Windows Phone8、Mac、Windows等平台,引擎基于MIT开源协议,完全开源、免费、易学易用,拥有活跃的社区支持。
|
||||
|
||||
**Cocos2d-JS让2D的游戏编程门槛更低,使用更加容易和高效。和其他类似游戏引擎相比,它定义了更加清晰的2D游戏编程的基本组件、易学易用的API,并且具备原生性能的脚本绑定技术,实现游戏的跨原生平台发布,开发效率更高,使用简单。**
|
||||
|
||||
它本身融合了Cocos2d-HTML5和Cocos2d-x JavaScript Bindings(JSB),支持Cocos2d-x的所有核心特性并提供更简单易用的JavaScript风格API,基于Cocos2d-JS的框架,可以方便地使用JavaScript语言进行游戏开发,快速构建原型进行测试和验证。
|
||||
|
||||
由于Cocos2d-html5的API和Cocos2d-x JSB的API高度一致,开发出来的游戏不用修改代码或者修改少量代码就可打包为原生性能表现的混合游戏,发布到原生应用市场,这就是一次编码全平台部署的效果。
|
||||
|
||||
## 小结
|
||||
|
||||
这一节,我给你介绍了最流行的三款HTML5游戏引擎。
|
||||
|
||||
其中一款是商业引擎,另外两款可以自由使用。从难易角度讲,Construct 2拥有更方便的开发体验;从流行度讲,Cocos2d-JS和白鹭都属于国内最流行的HTML5游戏引擎。
|
||||
|
||||
你可以根据自己的需求来选择,**如果美术熟悉Cocos2d-JS,或者想要快速上手2D游戏,可以选择Cocos2d-JS;如果对编程不太熟练,可以选择Construct 2;如果是拥有完整流程的开发公司,Cocos2d-JS和白鹭都可以选择**。
|
||||
|
||||
最后,给你留一个小问题吧。
|
||||
|
||||
现在流行的微信小游戏,目前只支持3M左右的大小,否则就审核不过,那么如果在游戏资源大的情况下,有什么方案可以让游戏维持在3M大小呢?
|
||||
|
||||
欢迎留言说出你的看法。我在下一节的挑战中等你!
|
@@ -0,0 +1,215 @@
|
||||
<audio id="audio" title="第30讲 | 热点剖析(三):试试看,你也可以编写一款HTML5小游戏!" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/fc/0d/fc5ac61517f259cb128b2f2bd95e8c0d.mp3"></audio>
|
||||
|
||||
前两周,我分析了[HTML5的核心竞争力](https://time.geekbang.org/column/article/9298)以及[HTML5游戏的引擎](https://time.geekbang.org/column/article/9702)。选择好了HTML5引擎,我们就可以开始制作游戏了。
|
||||
|
||||
对于编写HTML5小游戏,你或许会很有兴趣,因为HTML5现在已然是一个潮流,而且利用引擎编写HTML5游戏已经变得相当方便。
|
||||
|
||||
## 如何选择一款引擎?
|
||||
|
||||
我选择的是比较容易上手的lufylengend引擎。为什么要选择这款引擎呢?因为它只需要下载一个压缩包,并且不需要特别繁琐的说明和设置就能直接上手,用作我们的教学示例是最合适的。
|
||||
|
||||
如果使用白鹭引擎或者Cocos-2d引擎这些比较有名的引擎,可能会有这些问题。
|
||||
|
||||
<li>
|
||||
这些引擎从工具到套件都非常成熟,你直接下载一个引擎启动器或者组件管理器,就可以一应俱全地在启动器里面下载,配置到默认路径。但是,这些工具拥有纷繁复杂的界面,你连上手都要费一段时间,更别说短时间内熟练使用并制作出一款游戏。
|
||||
</li>
|
||||
<li>
|
||||
这些引擎需要引入的库或者使用的方式极为系统,所以你需要系统地引入库文件,才可以使用。事实上我要做的示例,并不需要很多复杂的东西,你只需要跟我从头到尾走一遍,就能明白编写HTML5游戏是怎么回事。
|
||||
</li>
|
||||
<li>
|
||||
这些引擎需要别的工具支持,比如node.js。作为新手来说,光配置node.js就是一项比较麻烦的工作。所以我选择了lufylengend引擎这一个比较“单纯的”引擎来作为教学引擎。
|
||||
</li>
|
||||
|
||||
## 几个简单的说明
|
||||
|
||||
你可以从这个地址下载最新版本:[https://github.com/lufylegend/lufylegend.js/archive/lufylegend-1.10.1.zip](https://github.com/lufylegend/lufylegend.js/archive/lufylegend-1.10.1.zip) 。下载下来的安装包大约有30M大,解压缩后有36M左右。解压缩后,我们会看到一系列的js文件。
|
||||
|
||||
我先对这些文件做一些说明,并且对最基础的编程流程做一个简单的梳理。
|
||||
|
||||
压缩包内包含lufylegend-版本号.js和lufylegend-版本号.min.js这两个**完整版本**,还有lufylegend-版本号.simple.js和lufylegend-版本号.simple.min.js这两个**缩减版本**,其中带min字样的是去除了回车和空格的压缩版本。如果你使用JavaScript编程,缩减版本对于你来说再熟悉不过的了。
|
||||
|
||||
其中,simple缩减版本与完整版本的区别在于,它将LBox2d、LQuadTree、LTransitionManager、LoadingSample1、LoadingSample2、LoadingSample3、LoadingSample4、LoadingSample5等几个类与HTML5引擎的常用部分分离,缩减了引擎的体积。如果需要用到被分离的部分功能的话,可以手动进行加载。
|
||||
|
||||
随后,可以在HTML代码中将legend引擎的库件引入。调用LInit函数,初始化库件。然后开始游戏代码的编写。剩下,你只需要有一款合适的IDE就可以开始编程了。
|
||||
|
||||
对制作HTML5游戏来说,你首先要做的是,将游戏场景在浏览器中呈现出来。把Windows的窗体,从系统客户端程序搬到浏览器上,呈现的窗体从可执行文件变成了浏览器。从这个角度讲,**浏览器担负了应用层的工作,浏览器本身担负了解释程序,并且渲染的过程,**所以,从理论上讲,**相同的游戏类型和游戏内容,HTML5游戏的渲染速度是比不上客户端游戏的渲染速度的。**
|
||||
|
||||
## 一起动手制作吧!
|
||||
|
||||
很凑巧的是,lufylengend引擎也拥有一款打飞机demo。我们只需要在lufylegend引擎目录的examples/demo下,找到barrage目录。
|
||||
|
||||
这一款打飞机的游戏,打开后是这个样子。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/bb/b5/bb3765557be1728cbd606fa54cc4a8b5.jpg" alt="">
|
||||
|
||||
这和我们之前讲述的内容非常类似。那我就借解释一下这款游戏的代码,来教你制作。
|
||||
|
||||
在目录下,有一个index.html,这就是游戏的开始页面。在这个页面下,我们先来看一下部分代码。
|
||||
|
||||
```
|
||||
<script type="text/javascript" src="../load_lufylegend.js"></script>
|
||||
<script type="text/javascript">
|
||||
if(LGlobal.canTouch){
|
||||
LGlobal.stageScale = LStageScaleMode.EXACT_FIT;
|
||||
LSystem.screen(LStage.FULL_SCREEN);
|
||||
}
|
||||
</script>
|
||||
<script type="text/javascript" src="./js/Main.js"></script>
|
||||
|
||||
```
|
||||
|
||||
如果你熟悉web编程,对于这些代码肯定非常熟悉。在开始的地方,我们看到载入的JavaScript代码是load_lufylegend.js,这个js文件包含在打飞机游戏的上一层目录,内部就只有一行代码。
|
||||
|
||||
```
|
||||
document.write('<script type="text/javascript" src="../../../lufylegend-1.10.1.min.js"></script> ');
|
||||
|
||||
```
|
||||
|
||||
我们看到,在这个js文件内,包含了lufylegend的原始引擎文件。至于为什么要这么做,为什么要使用两个文件包含引擎,是因为这样可以保持游戏代码的干净。如果你要修改引擎的包含路径,不需要修改游戏本体文件,只需要修改load_lufylegend.js包含路径即可。
|
||||
|
||||
而LGlobal.canTouch这段话的意思是,如果是移动版本的话,设置缩放模式为适应屏幕,并且为全屏,代码是:
|
||||
|
||||
```
|
||||
LSystem.screen(LStage.FULL_SCREEN)
|
||||
|
||||
```
|
||||
|
||||
最后,导入游戏脚本Main.js文件。
|
||||
|
||||
在Main.js里面,我们看到,它还包含了三个别的js文件,代码是这样。
|
||||
|
||||
```
|
||||
imgData.push({type:"js",path:"./js/Global.js"});
|
||||
imgData.push({type:"js",path:"./js/Bullet.js"});
|
||||
imgData.push({type:"js",path:"./js/Plain.js"});
|
||||
|
||||
```
|
||||
|
||||
它包含了一个共有类Global.js、子弹类Bullet.js以及飞机类Plain.js。之后的代码是这样的。
|
||||
|
||||
```
|
||||
loadingLayer = new LoadingSample1();
|
||||
addChild(loadingLayer);
|
||||
|
||||
```
|
||||
|
||||
其中LoadingSample1是“载入进度条”类,我们可以在下面的代码看到载入的实现。
|
||||
|
||||
```
|
||||
LLoadManage.load(
|
||||
imgData,
|
||||
function(progress){
|
||||
loadingLayer.setProgress(progress);
|
||||
},
|
||||
function(result){
|
||||
imglist = result;
|
||||
removeChild(loadingLayer);
|
||||
loadingLayer = null;
|
||||
gameInit();
|
||||
}
|
||||
);
|
||||
|
||||
```
|
||||
|
||||
在载入结束后,就开始gameInit函数的调用,也就是游戏初始化。
|
||||
|
||||
```
|
||||
function gameInit(event){
|
||||
//游戏底层实例化
|
||||
backLayer = new LSprite();
|
||||
addChild(backLayer);
|
||||
ctrlLayer = new LSprite();
|
||||
addChild(ctrlLayer);
|
||||
|
||||
```
|
||||
|
||||
LSprite是引擎的基本显示列表构造,里面包含了显示内容的列表节点,addChild就是将显示内容添加到节点列表。
|
||||
|
||||
```
|
||||
//添加游戏背景
|
||||
bitmapdata = new LBitmapData(imglist["back"]);
|
||||
bitmap = new LBitmap(bitmapdata);
|
||||
backLayer.addChild(bitmap);
|
||||
|
||||
```
|
||||
|
||||
这几段代码就是将背景图片也添加到显示节点列表。
|
||||
|
||||
```
|
||||
//得分显示
|
||||
pointText = new LTextField();
|
||||
pointText.color = "#ffffff";
|
||||
pointText.size = 20;
|
||||
pointText.text = point;
|
||||
backLayer.addChild(pointText)
|
||||
|
||||
```
|
||||
|
||||
这是一个得分的显示,所以需要新建一个文本类,并设置颜色和大小,并将之放到显示节点的列表。
|
||||
|
||||
```
|
||||
//加入玩家
|
||||
player = new Plain("player",0,200,600,[5]);
|
||||
backLayer.addChild(player);
|
||||
|
||||
```
|
||||
|
||||
我们需要新建一个玩家类。新建玩家,其实就是新建一个飞机类型,所以我们在这里看到一个plain类的创建。
|
||||
|
||||
这个创建函数的实现原型是这样的。
|
||||
|
||||
```
|
||||
function Plain(name,belong,x,y,bullets)
|
||||
|
||||
```
|
||||
|
||||
你可能会觉得奇怪,Plain是什么意思,在它的demo里面,Plain是飞机的意思,然而可能是作者的一时疏忽或者是英文“捉急”,所以就把Plane写成了Plain。以下所有和飞机相关的代码都是Plain,虽然并不影响代码的运行,但是出于严谨考虑,我在这里更正一下,Plain等于Plane。
|
||||
|
||||
第一个参数是名字,第二个参数是飞机所属,表明是属于敌人还是玩家,随后两个参数(x,y)是飞机在2D画布上所显示的位置,最后一个bullets是子弹的数组。
|
||||
|
||||
```
|
||||
//添加帧事件,开始游戏循环
|
||||
backLayer.addEventListener(LEvent.ENTER_FRAME,onframe);
|
||||
//添加控制事件
|
||||
backLayer.addEventListener(LMouseEvent.MOUSE_DOWN,ondown);
|
||||
backLayer.addEventListener(LMouseEvent.MOUSE_UP,onup);
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
在初始化的最后,我们需要添加鼠标事件,将鼠标事件LMouseEvent的鼠标上下操作事件都放入到事件侦听函数内:addEventListener。
|
||||
|
||||
看到这里,你不禁会问,按照我们所教学的,游戏应该会有一个大循环来完成游戏的显示、操作等内容。那这个循环在哪里呢?
|
||||
|
||||
事实上这个循环,就在上面这串代码中。
|
||||
|
||||
```
|
||||
backLayer.addEventListener(LEvent.ENTER_FRAME,onframe);
|
||||
|
||||
```
|
||||
|
||||
其中,LEvent为事件类。**和传统客户端游戏不同,在HTML5游戏引擎中,循环采用了事件代码来完成,只要你在侦听器函数中注册了事件,都会一帧一帧不停地调度这个事件,以此达到循环的效果。**
|
||||
|
||||
在这里,注册的侦听事件函数就是onframe函数。查看它的源代码你可以看到onframe函数的实现细节,我就不在这里进行阐述了。
|
||||
|
||||
## 小结
|
||||
|
||||
今天,我们使用lufylegend引擎剖析了HTML5游戏的编写方式。我来总结一下。
|
||||
|
||||
<li>
|
||||
HTML5游戏的启动页是一个HTML文件。这个文件包含引擎的js文件。在其他别的引擎中,也是使用类似的方式来加载引擎。包含了引擎,就可以针对引擎所封装的接口进行游戏的开发。
|
||||
</li>
|
||||
<li>
|
||||
HTML5游戏的循环方式和传统游戏的循环方式不同。由于HTML5游戏引擎绝大部分是使用JavaScript脚本编写的,而JS本身就是以事件驱动的方式来工作的,所以**使用事件驱动是HTML5游戏引擎的一个很大特点**。我们在事件侦听函数中注册一个事件函数,在这个函数内编写“游戏循环”内的代码,就能起到传统游戏循环的作用。
|
||||
</li>
|
||||
<li>
|
||||
在HTML5游戏中,我们几乎不需要关心图片的刷新或者清空操作。这些操作比之传统客户端游戏更为简洁,我们只需要关心游戏的图片呈现以及操作即可。
|
||||
</li>
|
||||
|
||||
简单来说,**HTML5游戏就是一种使用事件驱动模式并渲染在网页上的一种技术,省却了传统游戏的底层操控。**你在制作的时候,可以把更多的关注点放在游戏逻辑和可玩性上。
|
||||
|
||||
最后,留一个小问题给你。
|
||||
|
||||
在类似这样的HTML5打飞机游戏中,碰撞检测是怎么做的呢?请结合我以前的讲过的内容给出一个答案。
|
||||
|
||||
欢迎留言说出你的看法。我在下一节的挑战中等你!
|
@@ -0,0 +1,96 @@
|
||||
<audio id="audio" title="第31讲 | 热点剖析(四):安卓端和苹果端游戏开发有什么区别?" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/fd/ae/fdfd2df5d858c717108b07b300d4f0ae.mp3"></audio>
|
||||
|
||||
所谓的移动端,指的是可以随时拿在手上游戏和工作的,自带直流电源的设备,所以从游戏角度讲,手机、掌上游戏机、iPad都属于移动端设备。
|
||||
|
||||
我们今天的侧重点在安卓和苹果端的手机游戏,在开始说手机游戏之前,我们先简单了解一下掌上游戏机,因为这毕竟是移动端游戏的鼻祖。
|
||||
|
||||
在游戏发展的历史中,游戏机从8位发展到32位、64位;游戏存储的媒体,从芯片到卡带到光盘再到网络下载。从电视游戏机到掌上游戏机,游戏存储的容量也越做越大,游戏机也变得越来越小巧、轻薄。
|
||||
|
||||
在如今的手机游戏流行之前,各种掌上游戏机在游戏界的竞争可谓硝烟弥漫。GB、GBA、GBASP、NDS、3DS、PSP、PSV,这是很多人都耳熟能详的掌上游戏主机。当然在这之中也有一些只是昙花一现。加上智能手机的出现,能在手机上玩到如此多种多样的游戏,在此之前,这些东西人们从来没有想过。
|
||||
|
||||
因为在当时的条件下,GameBoy系列、NDS系列、3DS系列,每一款都是惊艳世界的产品。然而到了智能机时代,这些产品的优势逐渐被削弱,一大部分掌机玩家被分流去了手机和平板的市场。
|
||||
|
||||
而自从2007年第一代iPhone发布到今天,智能机经历了多次的变革。随着硬件的提升,移动端的游戏画面逐渐超越了2000年左右次世代32位机,比如PS2以及同时期的次世代游戏机。所以今天我们可以在智能机上玩到相当多的2D、3D游戏,**尽管移动端都是小屏幕,但呈现结果其实已经不输给几年前的高端电脑。**
|
||||
|
||||
智能机发展到现在,操作系统从苹果、安卓、塞班、黑莓、Windows等,大战最终剩下两大操作系统阵营,苹果和安卓。而苹果和安卓两大生态系统,一个是**封闭式**的系统,一个是**开放式**的系统,有相同点,也有不同点,所以在这两大系统下编写游戏,有很多内容可以讲。
|
||||
|
||||
首先,从**编程语言**这方面说,苹果系统大量使用Objective-C、Swift来开发游戏,而安卓大量使用的是Java。
|
||||
|
||||
而苹果公司选择Objective-C的原因是因为苹果收购了NEXTSTEP。NEXTSTEP是由NeXT.公司所开发的操作系统。这套系统以Mach和BSD为基础,Objective-C作为原生语言,拥有先进的GUI界面。后来苹果公司将NeXT买下,成为Mac OS X的基础,抛开语言特性不说,Objective-C比C++出现年代更早,更为动态),使用Objective-C也有很大因素是这一历史原因。
|
||||
|
||||
而安卓刚诞生的时候,要与苹果展开竞争,目的肯定是要降低开发门槛,吸引更多开发者加入,才能带动安卓的普及。所以选择Java入门比C++来得快,在跨平台的能力上也比C++来得容易,庞大活跃的Java社区可以提供足够的第三方资源库。所以Java成为了安卓平台的首选开发语言,选择Java是一个在执行效率和开发效率之间均衡的选择。
|
||||
|
||||
在安卓和苹果端开发游戏,除了语言区别之外,还有审核区别。如果我们说的是中国开发者,那苹果开发者的开发工作就复杂多了,不仅要申请开发者帐号,递交开发者年费,还要申请游戏运营资质等等。在安卓端,你就省却了申请开发帐号,开发年费的问题,但是其他资质一样是需要申请的。
|
||||
|
||||
不管两者平台的开发语言如何,在安卓和苹果端,使用游戏引擎编写游戏的话,除了使用的语言不同之外,编程接口、引擎的周边工具、美术资源以及最终构建完成后的游戏效果都是一样的。
|
||||
|
||||
在iOS的环境下,我们同样也可以使用游戏引擎来编写游戏。在苹果的体系下,2D游戏比较流行的引擎是SpriteKit。
|
||||
|
||||
SpriteKit是苹果公司在iOS 7的SDK中新加入的一个2D游戏框架,包括物理引擎、视频、滤镜、遮罩等等。IDE中对SpriteKit也有比较好的集成,因为减少了开发者的工作。
|
||||
|
||||
SpriteKit里面有几个比较常用的类:
|
||||
|
||||
<li>
|
||||
SKSpriteNode,用来绘制精灵的纹理;
|
||||
</li>
|
||||
<li>
|
||||
SKLabelNode ,文本渲染类;
|
||||
</li>
|
||||
<li>
|
||||
SKVideoNode,视频播放的类;
|
||||
</li>
|
||||
<li>
|
||||
SKEmitterNode,粒子系统的创建和渲染;
|
||||
</li>
|
||||
<li>
|
||||
SKShapeNode,基于Core Graphics 路径形状的渲染;
|
||||
</li>
|
||||
<li>
|
||||
SKEffectNode,使用遮罩来裁剪子节点的类。
|
||||
</li>
|
||||
|
||||
因为是苹果公司推出的2D游戏引擎,所以你可以在苹果的机器上编写和调试代码,并且在iPhone上进行预览和测试。
|
||||
|
||||
在编写游戏的过程中,安卓使用工具是Android Studio,而苹果使用的是XCode等编程工具。除了苹果特有的游戏库之外,有不少通用的游戏引擎也可供选择,比如Cocos2d-x之类的,在这两个平台都能编写,比如Unity,比如libGDX游戏库,也是目前在安卓、苹果上编写游戏适合选择的一个游戏库。
|
||||
|
||||
所以如果使用跨平台的游戏引擎,**在两大平台下开发,除了开发语言的区别之外,底层的内容并没有什么区别**,比如Cocos2d-x、libGDX等等,都是跨平台生成不同目标代码的引擎。
|
||||
|
||||
我们继续拿libGDX来做说明。libGDX兼容多种平台系统,自然也包括安卓和苹果。
|
||||
|
||||
这款引擎兼容性强,为调试和开发提供了便利。为什么这么说呢?你可以在电脑上编写测试和调试游戏,但是不需要打开安卓模拟器。开发应用的同学应该知道,安卓应用一般是在电脑上编写、测试、调试,并且到模拟器或者安卓硬件上进行预览运行,但是libGDX解决了这个问题,你可以直接在桌面上进行开发测试和调试。
|
||||
|
||||
libGDX引擎是由audio(音频操作)、files(文件读取)、graphics(2D/3D图像)、math(数学绘图运算)、physics(Box2D物理引擎封装)、scenes(2D/3D场景组件)、utils(内置工具)这些主要模块所组成。
|
||||
|
||||
libGDX主要是用Java编写的,还用了少部分的C/C++代码。至于这部分C/C++代码,是为了针对一些性能做出优化而编写的,比如音频、物理引擎等等。在Java层面,它已经封装了所有的本地代码,相比别的安卓游戏引擎,libGDX的执行效率也比较突出。
|
||||
|
||||
libGDX使用jni封装了Box2D物理引擎的C++版本,所以比之JBox2D速度更快,目前比较流行的几个包含物理引擎安卓游戏引擎(如Andengine、Rokon等)都在用libGDX的封装版本。
|
||||
|
||||
libGDX的开发工具也是非常地丰富,比如粒子编辑器、文字生成工具、贴图合并工具,一些UI库等。
|
||||
|
||||
另外,在网络部分,libGDX最早的版本提供了单机游戏的编写或者一些联网程度不是特别高的游戏。
|
||||
|
||||
在后续的版本里面,由于市场和竞争的原因,现在新版本的libGDX也提供了专门的网络模块。在一款将虚拟环境与现实地理位置信息结合在一起的手机游戏《Ingress》推出之后,也有部分国内公司基于libGDX网络模块编写的手机网络游戏。
|
||||
|
||||
另外,libGDX拥有很强大的第三发工具,比如第三方物理引擎的属性编辑器PhysicsEditor、贴图资源打包工具TexturePacker以及Spine。Spine是制作2D骨骼游戏的动画制作软件,功能非常强大,它的作者也是libGDX的核心代码编写者之一。
|
||||
|
||||
从文档看,libGDX的文档数量已经比较完善了,但是大部分都是英文,对于部分开发者来说学习难度较大。虽然libGDX拥有非常活跃的官方讨论社区,但是大部分还是英文的。
|
||||
|
||||
你可以通过libGDX来编写苹果和安卓的游戏,当然如果你编写的是网络游戏,那么服务器端就需要你自己来编写。
|
||||
|
||||
## 小结
|
||||
|
||||
我来总结一下今天的内容。
|
||||
|
||||
<li>
|
||||
从游戏角度讲,手机、掌上游戏机、iPad都属于移动端设备。而进入智能机时代之后,掌上游戏机逐渐退居幕后,成为少部分游戏发烧友的选择。
|
||||
</li>
|
||||
<li>
|
||||
安卓端和苹果端在开发游戏中的区别,主要体现在开发语言上。苹果系统大量使用Objective-C、Swift,而安卓大量使用的是Java。
|
||||
</li>
|
||||
<li>
|
||||
之后,我介绍了苹果端的比较流行的引擎SpriteKit以及适用于各种平台的libGDX。使用libGDX在各个平台编写出的游戏,表现几乎是一样的,除了执行效率或者耗电水平会有细微的差别,但这和引擎其实关系不大。
|
||||
</li>
|
||||
|
||||
最后,给你留一个小问题。你知道什么是2D骨骼游戏吗?能否举个例子?
|
||||
|
||||
欢迎留言说出你的看法。我在下一节的挑战中等你!
|
110
极客时间专栏/从0开始学游戏开发/第六章:热点剖析/第32讲 | 热点剖析(五):如何选择移动端的游戏引擎?.md
Normal file
110
极客时间专栏/从0开始学游戏开发/第六章:热点剖析/第32讲 | 热点剖析(五):如何选择移动端的游戏引擎?.md
Normal file
@@ -0,0 +1,110 @@
|
||||
<audio id="audio" title="第32讲 | 热点剖析(五):如何选择移动端的游戏引擎?" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/79/84/79f0034e59b295c2572439296ea10884.mp3"></audio>
|
||||
|
||||
上一次,我和你探讨了[移动端游戏的一些区别和特点](https://time.geekbang.org/column/article/10423),我特别介绍了libGDX这款游戏引擎。因为这款游戏引擎是多平台的,且各种第三方工具都很完备,比如物理引擎、特效、2D骨骼动画工具等等,所以libGDX目前已经被越来越多的公司和个人接受和使用。
|
||||
|
||||
在苹果端,我们也讲到了,苹果公司推出的SpriteKit游戏开发框架,在苹果体系下,使用XCode就可以很方便地使用SK工具开发出好玩的2D移动游戏。
|
||||
|
||||
从目前最新的游戏引擎的趋势看,一次编码、到处兼容已经成为了市场的主流,多种语言、一次打包(多种语言都可以编写相同的代码,然后配合打包成目标平台的游戏),也是程序员喜闻乐见的一种编程方式。
|
||||
|
||||
如果你准备编写移动端的游戏,或者你已经是app程序员,有编码经验但是想要转型游戏程序员,那么你要对移动端的游戏引擎有一定的了解,才能开始你的游戏编程之旅。
|
||||
|
||||
## 五种常见的移动端引擎
|
||||
|
||||
我今天介绍五种常见的移动端引擎,分别是Unity、虚幻、App Game Kit、Corona SDK、Cocos2d-x。
|
||||
|
||||
### Unity
|
||||
|
||||
和虚幻之类有名的游戏引擎一样,Unity最初是从3D网页引擎的样子进化成现在这样的。Unity普通版是400美元,但是Pro版本要1500多美元,但是如果你购买Pro版的话会得到更强大的功能和编辑器等等。Unity不仅支持电脑和移动端多平台,还支持游戏机甚至掌上游戏机,比如我们熟知的PS系列和PSV之类的,比如《杀出重围》《神庙逃亡》等,都是使用Unity引擎制作的。
|
||||
|
||||
Unity的**编程**可以使用C#、JavaScript、Java、Boo等脚本语言。对于Flash,Unity已经放弃支持这个平台了。事实上,Unity在版本4.0之前是可以支持将游戏转换为Flash平台的,4.0后已经不支持转成Flash游戏了。至于Flash被各家放弃的原因我在之前的文章已经讲过,这里就不多说了。
|
||||
|
||||
Unity拥有大量的所见即所得的编程**界面开发工具**。比如支持3D骨骼和动画的导入、贴图的材质可以转换为自身的U3D格式等等。
|
||||
|
||||
在**底层**方面,它支持OpenGL以及DX系列。它自带的物理引擎、粒子系统,性能也极其高效,还支持网络系统,所以你可以使用Unity来编写单机或者网络游戏。
|
||||
|
||||
### 虚幻
|
||||
|
||||
这个大佬级别的引擎,你一定不陌生。它现在已经支持在移动平台使用了。虚幻有免费版本和付费版本,但是只有付费版本你可以获取引擎全部的C++源代码。最为可贵的是,出品虚幻的Epic公司有发布[完整](http://study.163.com/course/introduction/185001.htm)[的](http://study.163.com/course/introduction/185001.htm)[教学视频](http://study.163.com/course/introduction/185001.htm),而开发人员也能从网络社区获取大量的学习资源。
|
||||
|
||||
这款引擎不仅仅在游戏引擎技术方面比较优秀,运营方面、市场方面,在行业内都是属于前列。耳熟能详的《蝙蝠侠》《阿卡姆之城》等等用的都是虚幻引擎。
|
||||
|
||||
虚幻引擎有完整的**数据属性编辑功能**。关卡设计人员可以自由地对游戏中的物件进行设置,也可以通过脚本编写的形式进行优化设置。关于关卡编辑器的功能,我在[之前的文章](https://time.geekbang.org/column/article/8670)中有详细介绍。
|
||||
|
||||
虚幻的**资源管理器**可以进行快速准确地查找、观看,并对游戏开发中的各种资源进行整理组织。地图编辑器可以让美术开发人员自由地对地形进行升降调节。更强大的是,它可以通过带有alpha通道的笔刷对地图的层进行融合修饰,可以在地图编辑中生成碰撞数据和位移贴图,你看到的可以说是游戏场景的一种演示版也不为过。
|
||||
|
||||
它的编辑器还为美术制作人员提供了完整的模型、骨骼和动画数据导出工具,并可以编辑游戏事件所需要的声音文件、剧情脚本。
|
||||
|
||||
### App Game Kit
|
||||
|
||||
我个人认为,App Game Kit 比较适合刚进阶的游戏开发者。这款引擎使用非常容易上手,你可以去它的[官网](https://www.appgamekit.com/)看最新发布的消息。有一款Driving Test Success的应用就是使用AGK编写的,当然这是一个商业化的付费引擎。这款游戏引擎也支持树莓派上编程,可谓是各个平台都兼容。
|
||||
|
||||
### Corona SDK
|
||||
|
||||
如果你深入学习过或者接触过移动端游戏开发的话,你一定知道这款游戏引擎。这款引擎不仅仅是跨平台支持,甚至还支持Kindle电子书这类的平台。
|
||||
|
||||
它的编程语言为Lua,我们在之后的文章会介绍Lua和C语言的绑定,我在这里只是简单说一下。相对于别的语言来说,Lua更加轻量级,对初学者来说也更容易上手。
|
||||
|
||||
Corona SDK的客户除了个人,也有很多知名的大厂,比如日本的南梦宫等等。当然收费也并不便宜,专业版就接近600美元,企业版接近1000美元,当然如果是企业用户的话,这点投入比之自己编写引擎来说,划算得多。
|
||||
|
||||
###
|
||||
|
||||
Cocos2d-x
|
||||
|
||||
国内的朋友对这款引擎非常熟悉,与此同时,它的同胞兄弟Cocos2d系列,我也在[前面](https://time.geekbang.org/column/article/9702)做过一些介绍。
|
||||
|
||||
很多人以为Cocos2d-x是中国人编写的。事实上Cocos2d的作者是一个叫Richardo的阿根廷人。Cocos是在阿根廷的一个叫Los Cocos的地方诞生的。由于Richardo的学习曲线是汇编、C/C++、Python,所以这个时候Cocos版本是Python的。他们将研究成果在PyCon 2008和EuroPython 2008上都做了展示。
|
||||
|
||||
2008年的时候,他们抓住iPhone发布的机遇,在2008年6月宣布支持iPhone,然后沿用了Python版本的Cocos2d相同的设计思维,用Object-C重新编写了iPhone版的Cocos2d并且发布了0.1版。智能手机刚起步的时候,iPhone用户数量明显多过安卓,所以Cocos2d刚开始就笼络了大批iPhone开发者,随后又有了安卓版。所以,现在用Cocos2d引擎编写的游戏,几乎随处可见。
|
||||
|
||||
在2009年的时候,Cocos团队编写了Cocos2d的World Editor,Cocos2d-Python。这个编辑器用起来非常方便,随后Cocos2d的各种平台和各种语言的移植版本也逐渐被各类程序员拿去开发并且出现在开源社区。
|
||||
|
||||
我们可以看到几个主流语言的绑定版本:
|
||||
|
||||
<li>
|
||||
Ruby版本:ShinyCocos
|
||||
</li>
|
||||
<li>
|
||||
安卓版本:Cocos2d-Android
|
||||
</li>
|
||||
<li>
|
||||
.NET 版本:CocosNet(Mono based)
|
||||
</li>
|
||||
<li>
|
||||
Windows版本
|
||||
</li>
|
||||
|
||||
这里有一幅来自它的官网的产品分支图,你可以比较清晰地了解Cocos2d的各个分支。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/18/1c/183105d6284d501f3337c192ffebe11c.jpg" alt=""><br>
|
||||
同时经过几年的努力,Cocos系列也拥有了非常优秀的编辑器,例如SpriteSheet Editors(精灵序列图编辑器)、Particle Editors(粒子编辑器)、Font Editors(字体编辑器)、Tilemap Editors(瓦片地图编辑器)。
|
||||
|
||||
CocosStudio这款工具集套件于2012年发布,它是Cocos2d-x团队官方推出的游戏开发工具。CocoStudio根据开发团队自己在游戏开发中的经验,为移动游戏开发者和团队定做了这么一套集成工具,用意在降低游戏开发的门槛,提高开发效率;当然最主要还是为了Cocos2d-x占领游戏引擎市场。
|
||||
|
||||
## 如何选择引擎?
|
||||
|
||||
今天我介绍了这五款引擎,在开发的过程中,究竟该如何选择呢?如果接触游戏开发不久的话,你肯定还是会有点懵。 **其实只要有选择,就有取舍,你只要明确自己的需求,然后结合自己的需求和引擎自身的特性,来对比选择就可以了。** 这里我把这五种引擎的一些特点,总结了一下,列了一个表格。你在选择的时候,可以作为参考。
|
||||
|
||||
<img src="https://static001.geekbang.org/resource/image/52/b5/5207890afc60df1fef5d8ce01edda6b5.jpg" alt="">
|
||||
|
||||
首先,如果我们只是编写2D游戏,那么Cocos系列一定符合你的预期,而且能方便地制作出跨平台的游戏。
|
||||
|
||||
如果我们编写的是3D游戏,如果是商业购买多话,那么Unity和虚幻一定是不错的选择。在财力足够的情况下,选择这两个大厂级别的游戏引擎,一定会让你满意。
|
||||
|
||||
但是如果你需要编写休闲的、规模不大的游戏,那么Corona、App Game Kit就可以用。
|
||||
|
||||
## 小结
|
||||
|
||||
我们总结一下今天的内容。
|
||||
|
||||
<li>
|
||||
首先,移动平台的游戏引擎有一个最大的特点,游戏引擎已经逐渐演变成跨平台能力的游戏引擎,如果不这么做,很块就会被别的竞争对手所淘汰,我们先前讲到的HTML5游戏引擎,都可以编译出不同的跨平台的目标代码。
|
||||
</li>
|
||||
<li>
|
||||
其次,移动游戏引擎,要挑选适合自己的才行,引擎规模有大有小,做出来的游戏质量也都不同。游戏开发大厂,可以选择虚幻引擎;中等公司可以选择Unity;个人团队可以选择Cocos2d或者App Game Kit;个人开发者或者轻量级开发可以选择Corona SDK。
|
||||
</li>
|
||||
|
||||
最后,给你留一个小思考题吧。
|
||||
|
||||
如果用移动平台的游戏引擎编写移动应用,是否可以实现呢?
|
||||
|
||||
欢迎留言说出你的看法。我在下一节的挑战中等你!
|
@@ -0,0 +1,92 @@
|
||||
<audio id="audio" title="第33讲 | 热点剖析(六):AR和人工智能在游戏领域有哪些应用?" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/37/e8/37742211093aeac9a0536259b958d1e8.mp3"></audio>
|
||||
|
||||
在2014年左右,VR、AR、人工智能开始逐渐火热起来,我也曾在它最火的时候深入接触过这几项技术。
|
||||
|
||||
如果你不是在这个领域从业的话,除了VR之外,有很多名词你可能都没有听说过,那我们就先来看一下这些名词是什么意思。通过这几个名词,我们来看一下它们究竟是如何在游戏领域应用的。
|
||||
|
||||
## VR是什么?
|
||||
|
||||
**VR**本身是**Virual Reality**的缩写,意思就是**虚拟现实**。VR相对于AR、MR等技术来说,在技术上是最为简单的。简单地说,它只需要将3D画面做成可以通过3D眼镜呈现的内容即可,那么VR眼镜是怎么播放VR画面的呢?
|
||||
|
||||
VR基于不同视觉场,在局部空间中营造出对不同画面的深度感知,在用户的大脑视觉系统中形成一个虚拟现实视场,而决定虚拟现实视场的主要因素是透镜,而非我们人眼的瞳孔。因此,为了得到更宽广的视场,制作者需要缩短用户眼球与透镜间的距离,或增加透镜的大小。
|
||||
|
||||
VR眼镜的结构一般都是透镜加上屏幕成像的方式,透镜放置在眼前2~3厘米的地方,屏幕距离透镜3~6厘米,成像在眼前25~50厘米左右。
|
||||
|
||||
除此之外,在VR中,两个眼睛的立体视觉起的作用很大。用户双眼看到的不同图像是分别产生的,显示在不同的镜面上。用户带上VR眼镜后,一只眼睛只能看到奇数帧图像,另一只眼睛只能看到偶数帧图像,奇、偶帧之间的不同,也就因为视差产生了立体感。
|
||||
|
||||
人的眼睛有两方面用途,一个是判断左右距离,一个是判断前后深度距离。VR眼镜相当于通过透镜,欺骗了你的眼睛,让你的眼睛认为自己是在真实的场景下工作,而有些人对于距离和景深比较敏感,就会有眩晕的副作用出现,毕竟是模拟真实的效果,而非完全真实的场景。
|
||||
|
||||
## 如何区分AR和MR?
|
||||
|
||||
随着VR的兴起,AR也逐渐进入了人们的视野。**AR**(**Augmented Reality**)**就是增强现实**。简单地描述,所谓增强现实,就是利用摄像头或者头盔,将现实世界外部影像结合内部3D计算的影像,将内容混合。
|
||||
|
||||
比如我们走在一个空旷的屋子里面,忽然在AR视觉效果里面,出现一个怪兽,向你扑过来,你需要拿起手柄,将手柄变成武器,将怪兽杀死,这里面就涉及AR,**它将现实中不存在的东西模拟出来,变成增强了效果的现实场景。**
|
||||
|
||||
至于**MR**,它是**混合现实**(**Mixed Reality**)。混合现实的意义和AR非常相似,比如将现实混合在视觉效果中,这是两者都在做的事情。同时,AR和MR中比较重要的一个技术是定位技术。
|
||||
|
||||
基于2D定位的是AR最成熟的技术。2D定位是基于平面的识别和定位,比如利用手机App拍摄图书中的某个图片,然后虚拟物件就会出现在手机中的对应位置。这种App可以识别一幅图片或者图形,作为定位点,随后手机生成的虚拟物体会围绕这个点,融入到被拍摄的现实环境中。
|
||||
|
||||
3D环境的动态实时解析是当前AR在技术中最活跃的功能,这其中不得不说的就是SLAM定位。所谓SLAM就是“同时定位与映射”(Simultaneously Localization And Mapping)。
|
||||
|
||||
AR中的SLAM比其他别的领域中的难度大很多,因为移动端的硬件计算能力和资源比起其他硬件平台来说弱很多,所以难度比资源充足的硬件平台更大,所以有一些做法是利用网络交互,到主服务器去计算SLAM场景,但是网络交互又有实时性无法保证的问题。计算SLAM最好是本地计算,这样才能保证随时随地都能计算,而如果通过网络交互的话,你可能需要等好久才会拿到计算结果。
|
||||
|
||||
SLAM的问题可以这么理解:打开摄像头,你要知道“我(摄像头)在哪”。然后进行定位,定位完后需要对周围的环境进行映射和虚拟环境的构建。然后一边走,一边对周边环境进行虚拟模型的构建,确定本身在所建地图中的定位。所以AR SLAM需要在走的过程中,一方面把所见到的地方连起来成模型图,另一方面找到自己在地图上的定位, 这就是SLAM的原理。
|
||||
|
||||
AR和MR的原理大致一致,不一样的是,MR是在AR的基础上将3D物件更精确地展现出来。那究竟该怎么区分AR和MR呢?有一个方法就是,看虚拟物件是否会跟着真实场景一起动。如果是的话,就是MR;如果不是的话,就是AR。
|
||||
|
||||
所以,MR比AR更“先进”的地方就是,它看起来更像现实,所以是“混合现实”。当然MR还有更多事情可以做,比如它可以让你听到、感受到来自虚拟世界的感受,这是混合现实的另一层含义。
|
||||
|
||||
## AR在游戏开发中的应用
|
||||
|
||||
说完了这些名词,我们来看一下实际使用AR技术制作的游戏吧。
|
||||
|
||||
AR最出名的就是前些年的《PokeMon》和LBS结合版本的AR游戏,这款游戏风靡一时,可以说是AR领域一次比较成功的尝试。它利用SLAM技术,结合相机拍摄的真实场景,让虚拟小宠物出现在真实场景下,然后进行App端的操作。
|
||||
|
||||
VR就不用说了,现在Steam上拥有大量的VR游戏,比如前阵子非常火爆的《Beat Saber》,就是一款非常成功的VR音乐游戏。还有《刀剑神域》也是成功的VR游戏。
|
||||
|
||||
但是所谓的VR游戏,用到的VR头戴式设备,用的其实还是“MR”设备。因为所谓的混合现实头戴设备,就是将手中的手柄,眼里看到的内容进行混合,比如手柄变成剑或者手枪,这就是混合现实的一部分,所以使用MR设备也无可厚非。
|
||||
|
||||
所以在视觉效果的增强下,目前VR在游戏中的使用范围是最广的,其次是AR和MR。
|
||||
|
||||
## 人工智能在游戏开发中的应用
|
||||
|
||||
至于人工智能,那也是最近比较火爆的一个行业风口。但是从理论讲,我觉得人工智能、AR、VR并不会像HTML5技术、Flash技术等一样变成全面颠覆产业的技术,而是会成为各个行业的辅助。
|
||||
|
||||
人工智能涉及的领域很多,每一个分支进行细分,都是一个研究课题和研究方向,比如导航当中的语音识别、手机的人脸识别、专家系统、大数据分析、机器学习等等。在游戏领域,能使用到人工智能的地方,或者说最能体现人工智能的地方,就是游戏中的NPC。
|
||||
|
||||
**NPC是最简单,但也是最难做好的**。如果做得简单,你随便写几行脚本语言,就可以完成一段NPC,或者一整个城市NPC的编写。但是如果要写得好,利用简易的人工智能,就能将NPC做的很真实。
|
||||
|
||||
比如《老滚》中的NPC,你可以看到他走向某个地方去和某人说话,或者你跟踪他一段时间会发现他会和森林里某些野兽战斗。在脚本语言里面,就是大量的事件绑定机制来实现人工智能的功能,比如A事件和B事件组合出现就可以决定某些NPC的行为,比如你可以利用类似代码来作为NPC的行为准则。
|
||||
|
||||
```
|
||||
def foo():
|
||||
|
||||
if npc.action == eat and player.action == talk:
|
||||
|
||||
npc.action = talk
|
||||
|
||||
```
|
||||
|
||||
早几年,我曾经想做一款只有NPC,没有玩家的游戏。你可以观察它们的生活起居,也就是所谓的“上帝模式”。这样的游戏要求游戏中的NPC足够智能,以至于这里面的人工智能需要做一些最基础的判断,类似“自动”的“模拟人生”。然而当我开始编写逻辑代码的时候,就发现事情并非想象得那么简单。
|
||||
|
||||
我们先抛开人工智能本身不说。我们首先从NPC入手,从编程角度讲,每个NPC一定有一个统一的身体和大脑的类,就像“模拟人生”一样。我们先要塑造这个NPC的躯壳,有了躯壳,才能填写数据进去,比如他累了要睡觉,饿了要吃饭,渴了要喝水,到达一定阀值就要去做某件事情。
|
||||
|
||||
单从一个NPC入手的框架都很难实现,就算真的完成了一个NPC的人工智能的框架,一个游戏中有这么多NPC需要交互和计算,一台普通的个人电脑估计很难运算过来,所以从这点来讲,这个游戏的编写计划就已经很难实现。
|
||||
|
||||
我们最常见的就是还有地图生成、人物运动控制等。
|
||||
|
||||
我们可以通过学习算法进行地图的随机生成,比如哪些是河流,河流旁边一定有树木,河流旁边不可能有飞机场等等;另一个领域是利用神经网络实现人物运动控制,你如果有兴趣也可以去这个网站看。
|
||||
|
||||
[http://theorangeduck.com/page/phase-functioned-neural-networks-character-control](http://theorangeduck.com/page/phase-functioned-neural-networks-character-control)
|
||||
|
||||
除此之外,也可以用在一些2D讲故事类的游戏中,开放式结局的游戏中,有了人工智能,我们就可以把开放式解决做得更生动和有趣,每个人物的结局都可以是不同的,也没有任何死的套路可言,但是从某方面讲,这个要实现起来也有一定的难度。
|
||||
|
||||
## 小结
|
||||
|
||||
今天我们讲了VR、AR的知识以及人工智能在游戏中的应用。
|
||||
|
||||
AR和VR是对于人们在现实世界的一种增强技术,将现实和虚拟结合起来,做出更多优秀和好玩的游戏,而人工智能则能让人们在游戏中的体验能更好,比如智能的NPC行为,漂亮的随机地图的生成等等,这些技术的应用能使我们的游戏体验能变得更加丰富。
|
||||
|
||||
给你留个小问题,任天堂出的3DS,是最早的一款裸眼3D设备,这种技术是怎么实现的呢?
|
||||
|
||||
欢迎留言说出你的看法。我在下一节的挑战中等你!
|
80
极客时间专栏/从0开始学游戏开发/第六章:热点剖析/第34讲 | 热点剖析(七):谈谈微信小游戏的成功点.md
Normal file
80
极客时间专栏/从0开始学游戏开发/第六章:热点剖析/第34讲 | 热点剖析(七):谈谈微信小游戏的成功点.md
Normal file
@@ -0,0 +1,80 @@
|
||||
<audio id="audio" title="第34讲 | 热点剖析(七):谈谈微信小游戏的成功点" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/99/b6/99d7476394198b0663f8b0fb8e710eb6.mp3"></audio>
|
||||
|
||||
在定下这个专栏目录的时候,微信小游戏仅仅出现了唯一一款《跳一跳》。在写下这篇文章的时候,微信小游戏已经在小程序领域占据了绝大部分的江山。大量开发者涌入微信小游戏,为微信生态、为微信小程序的生态增添了无数可能性。作为游戏开发者,免不了要被挤入这场战斗。今天我们就来了解一下微信小程序和小游戏背后的技术,来看看它们成功的背后,有哪些技术上的支持和创新。
|
||||
|
||||
## 微信小游戏的技术创新
|
||||
|
||||
最早以前,微信小游戏有3M程序大小的限制,而到了现在,这个大小限制已经上升到了8M,这使得微信小游戏从轻量级的休闲游戏,逐渐往中级、重量级的方向发展。游戏的品质和操作性也有了质的提升。
|
||||
|
||||
小游戏的体积为什么会有限制呢?因为体积较小的话,我们可以从服务器快速拉取资源数据来开启游戏。现在,微信平台本身已经可以做到20M的体积限制,只是微信并不愿意开放地太快,因为开发者有一个循序渐进的过程,微信平台本身的战略规划也有一个循序渐进的过程。
|
||||
|
||||
我在之前的热点剖析部分,分析过HTML5技术发展以及HTML5游戏引擎,**其实微信小游戏、小程序,甚至微信本身都是基于HTML5技术的,而微信小游戏用的其实就是HTML5技术,只是在小游戏中运用的是Canvas 2D的API和WebGL 1.0的API。**
|
||||
|
||||
毕竟微信小游戏也属于小程序的范畴,所以我们先来看一下微信小程序。
|
||||
|
||||
微信小程序用的是基于WebView的技术。所谓的WebView,你可以理解为在手机中内置一款高性能WebKit内核的浏览器,然后将这个浏览器核心封装成SDK,供接口方调用。这个浏览器核心没有地址栏和导航栏,只是单纯的在软件需要的地方展示一个网页界面。
|
||||
|
||||
微信小程序本身分为页面的视图层和逻辑层。页面的视图层运用的是WXML和WXSS,它们是两种腾讯修改过的HTML和CSS技术;而逻辑层则分为Manager和API。视图层和逻辑层都呼叫了JSBridge技术,更下层则是一些网络服务、离线存储,再下层则是系统层。具体的结构,你可以看我画的这幅图。
|
||||
|
||||
微信小游戏脱胎于微信小程序。小游戏兼顾传统HTML5技术和小程序技术,但是小游戏却没有用到WebView技术,而是修改了HTML5规范的一些接口内容,成为腾讯自己的内容。也就是说,同一款游戏,如果要在微信小游戏和普通网站都能运行,需要编写两套代码。
|
||||
|
||||
那么你或许就要问了,为什么微信要自己开发一套Web体系而不用Web本身的标准体系呢,这样不是增加了前端程序员的工作量吗?如果说都是一套Web体系的话,大家不就可以皆大欢喜,到这里可以用,移植到那儿也可以用。
|
||||
|
||||
同样的问题,我们是不是可以这么问,为什么苹果公司要自己研发iOS系统,用最早最成熟的塞班系统不是挺好,诺基亚用得也挺不错。为什么谷歌要开发一套Go语言,现成的Java、Python不也挺好,都挺成熟,为什么一定要开发新的东西,让工程师入坑呢?
|
||||
|
||||
有很多人说,自己开发一套体系是因为微信下的棋很大,野心很大,你可以这么理解,我们今天从技术本身来看看,事情是什么样的。
|
||||
|
||||
我们从以下几个方面来看为什么微信要自己定义一套体系。
|
||||
|
||||
<li>
|
||||
**可以自定义Web标准**。为什么要自定义Web标准呢?我们从结果来看,自然是为了提升用户体验。而从技术层面讲,这和Web兼容性有关。Web标准本身是个庞大的体系。所以如果既要全部兼容Web体系又要按照自己的意愿去实现功能,这是很难做到的事情。比如,如果微信本身的小程序浏览器会重塑一套渲染规则,比如播放视频的时候自动屏蔽广告、按钮默认变成椭圆形等等,因此,自定义Web标准,可以去做更多的事情。
|
||||
</li>
|
||||
<li>
|
||||
**可以自定义开发标准**。微信扔掉了Web兼容性以及标准HTML5的内容之后,就开始自定义开发标准了,所以微信强制要求开发者按照某种编码规则来编写代码,从而解决了在普通Web编程中“如果不用某种规则来编码,就会出现兼容性问题”的难题,这样,就从源头上解决了这个问题。事实上,这也是“强制约束开发者写出素质较高的代码”。
|
||||
</li>
|
||||
<li>
|
||||
**可以有比HTML5更强的功能**。完全兼容标准HTML5的话,并非不可能,如果你熟悉前端开发的话,就会知道这个坑会有多大。因为首先HTML5不具备很多功能,比如获取手机设备信息、获取手机罗盘、地图定位等等。但如果用自定义的体系,加上从微信作为App本身具有的底层获取功能,就完全可以做到了。
|
||||
</li>
|
||||
<li>
|
||||
**防止刷流量、刷广告**。在防止垃圾HTML5页面出现的这件事情上,微信做了大量的工作,比如你应该经常可以看到的,如果出现单纯的IP地址的页面,微信就给出提示,询问你是否跳转,或者提示你可以举报诱导分享等等,当然这都不能完全避免垃圾HTML5页面出现在微信生态下,所以在小程序自定义规则的情况下,你只能按照定义规则来开发,如果想钻空子,最后小程序和小游戏的上线还有一道人工审核的关卡,所以想要出现垃圾HTML5页面的情况几乎是不可能出现的。
|
||||
</li>
|
||||
<li>
|
||||
**方便后续优化**。由于微信自己那一套体系是高层次抽象层,所以微信小程序团队可以在用户完全没有感知的情况下进行底层优化,而上层不用修改任何代码就可以了。
|
||||
</li>
|
||||
|
||||
所以说,微信小游戏其实是基于HTM5技术,并在此之上,充分结合自己的需求和产品特性,添加了自己的创新。
|
||||
|
||||
## 微信小游戏成功的原因
|
||||
|
||||
微信小游戏建立在微信本体上,因此微信能获取到的移动端的**底层功能**小游戏基本都能一并获取,比如网络连接、内部存储等等,而HTML5做不到这点。微信可以获取底层平台的接口且并不需要授权,因为微信安装上去后已经获取了手机的权限,小游戏想要或者一部分权限是很容易的事情,相比HTML5游戏要从浏览器获取权限那就是很麻烦的一件事情。
|
||||
|
||||
其次,因为微信本身作为**流量入口**,对于小游戏的传播是一个极大的便利,独立开发者或者中小游戏开发公司,如果前期没有推广资源和推广渠道,那么通过微信本身这个巨大的流量入口,就可以获取相比传统HTML5游戏更好的效果。
|
||||
|
||||
除此之外,传统HTML5小游戏可以包装成App的外壳做成App的形式供人下载,因此又多了一个获客途径。到了后期,苹果公司加大了对于HTML5应用和游戏包装成App这种形式的审核力度,加上网页机制的运行效率限制,HTML5套壳程序比原生应用的体验感也更差。
|
||||
|
||||
传统HTML5游戏发布之后,如果需要更新,则需要重新上传一次网页代码。如果用户端还需要重新刷新网页,甚至清除浏览器缓存等复杂的操作,如果做成App套壳,那就更需要在各个渠道市场上传一遍程序,这在效率上就慢了一截。而微信作为平台本身,更新游戏后,你重新获取只需要上传到微信平台就可以了,获取新游戏,刷新网页缓存,微信一并帮你做了。
|
||||
|
||||
传统HTML5游戏的**广告接入**,是非常麻烦的一件事情,你需要去和广告商去做分成机制、对接广告接口等等。如果是微信小游戏,你只需要对接微信自己的广告渠道就可以,可以说是一键就能对接几种广告机制,广告分成也是透明的、公开的。
|
||||
|
||||
微信平台本身拥有**打击拷贝游戏**的能力,如果有一款游戏被抄袭了,你可以投诉,如果发现属实,微信就会将抄袭的游戏下架,这样一来,就保护了原创游戏,激发广大开发者创作出更好的游戏,给微信带来更好的游戏生态。当然这里所谓的原创机制,是指的微信小游戏本身生态下的原创,因为作为成熟的游戏生态来讲,已经基本不存在狭义上的“原创”这两个字了。
|
||||
|
||||
## 小结
|
||||
|
||||
这节内容差不多了,我们来总结一下。我和你讲了这样几个内容。
|
||||
|
||||
<li>
|
||||
微信小游戏、小程序都是基于HTML5技术的,而微信小游戏的技术就是HTML5技术,只是在小游戏中运用的框架并不是普通的HTML5的框架。
|
||||
</li>
|
||||
<li>
|
||||
微信小程序用的是基于WebView的技术;小游戏却没有用到WebView技术,而是修改了HTML5规范的一些接口内容,成为腾讯自己的内容。
|
||||
</li>
|
||||
<li>
|
||||
微信平台之所以要自定义自己的一套体系,比如Web标准、开发标准等等,是因为可以结合微信本身的特性,在此基础上制作出更契合腾讯生态的产品,一句话就是,为了方便自己开发、优化和管理。
|
||||
</li>
|
||||
<li>
|
||||
微信小游戏基于微信的底层获取功能、广告接入优势和打击拷贝的能力,塑造了一个更好的微信小程序生态。
|
||||
</li>
|
||||
|
||||
迄今为止,你最喜欢玩的一款微信小游戏是什么?它吸引你的点是什么?
|
||||
|
||||
欢迎留言说出你的看法。我在下一节的挑战中等你!
|
74
极客时间专栏/从0开始学游戏开发/第六章:热点剖析/第35讲 | 热点剖析(八):谈谈移动游戏的未来发展.md
Normal file
74
极客时间专栏/从0开始学游戏开发/第六章:热点剖析/第35讲 | 热点剖析(八):谈谈移动游戏的未来发展.md
Normal file
@@ -0,0 +1,74 @@
|
||||
<audio id="audio" title="第35讲 | 热点剖析(八):谈谈移动游戏的未来发展" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/5b/56/5b67d559d069be0cb6d57058f9a69156.mp3"></audio>
|
||||
|
||||
随着芯片纳米工艺技术不断提升,我们的电子设备变得越来越小,而随着移动设备的普及,移动游戏一定是未来游戏行业发展的重头,未来游戏玩家将会花更多的时间在移动端的游戏上,所以我们今天就来探讨一下移动游戏的未来发展。
|
||||
|
||||
## 现阶段移动游戏是什么样?
|
||||
|
||||
在展望未来之前,我们先来看看现阶段的移动游戏是什么样的。
|
||||
|
||||
首先,移动游戏比较轻量级,一局游戏时间快,能很快出结果。像竞技类游戏的一局时间一般不会超过30分钟。由于手机屏幕和操作限制,没有游戏机手柄或者电脑鼠标键盘之类的方便操作,所以移动端的游戏操作手法极尽简化,所以需要尽量突出让人第一眼就能耳目一新的画面效果。
|
||||
|
||||
各大平台级的App都推出了不同的“小程序”技术,只是名称叫法各有不同,除了叫“小程序”,还有“快应用”“轻应用”的说法等等。在这样的聚合平台下,重量级原生游戏已经逐渐减少,转而都去了聚合平台下,比如微信小游戏。
|
||||
|
||||
而HTML5游戏依然有人在做,只是变成了大中型电脑网页游戏的形式,以及营销推广渠道的一种方法。这其实和以前Flash的路径一样。如果现在有人做HTML5游戏的话,更多的可能会往微信端、支付宝端等平台级应用上的小程序方向走。
|
||||
|
||||
原生移动端游戏往高操控性、高画质、高可玩性这几个方向走,人群更接近核心玩家,更多碎片时间的游戏内容将往HTML5、微信小游戏等方向走。
|
||||
|
||||
## 什么是移动游戏发展的最大掣肘?
|
||||
|
||||
要思考移动端游戏的发展,不得不提硬件的发展。没有硬件的发展,移动游戏始终是这样几种形式。而在硬件问题还不能解决的情况下,移动游戏有哪些路可以走呢?
|
||||
|
||||
首先,往更大型的方向发展,逐步取代电脑上一些中等、小型的游戏。手游的硬件发展带动质量的发展,变得更像电脑上的游戏,3D、2D的精美的游戏将更多出现在市场上。而重度游戏的发展,将会有迎合重度硬核玩家的游戏加入,包括周边设备的联动推出,比如手柄、键盘等等。
|
||||
|
||||
AR、VR等功能游戏的推出,就算是在现在,这几种类型也是一直在市场上推出,在不久的将来,手机硬件的提升会让这类游戏变得越来也多,裸眼3D游戏也会变得越来越多。
|
||||
|
||||
而更多利用手机硬件特性的游戏将会出现,比如随着苹果前置感应头的出现,前置感应的人体体感游戏,或者脸部感应游戏也会出现,这些其实都是以前Wii时代体感游戏的缩小版本。
|
||||
|
||||
手机游戏与电视或者电脑游戏联合互动。随着任天堂Switch的发布,多屏互动,小屏和大屏游戏联合也会是将来移动游戏的一个方向。如果有新的巨头加入手机竞争,比如微软,那么手机和电视机连接玩耍,或者安卓系统的电视盒子和手机端联动,也将会是一个发展的趋势。
|
||||
|
||||
其次,人工智能将出现更好的发展,泛游戏类型和应用,以及游戏内的人工智能,结合AR、VR等的游戏也将出现,游戏将会给玩家一个更好的体验。
|
||||
|
||||
移动端的硬件发展,除了平板市场之外,手机市场的硬件发展并不是特别快,而平板市场则是下一个移动端硬件发展的风口,比如安卓的拥有独立显卡的平板,这就给深度学习、人工智能提供了良好的运算平台以及商业接口。毕竟高质量的移动游戏需要在更高级的硬件设备上才能呈现。
|
||||
|
||||
## 移动设备未来会有什么样的变化?
|
||||
|
||||
在这个基础上,我们的移动设备会有什么变化呢?
|
||||
|
||||
移动设备会随着硬件的发展变得越来也小。虽然越来也小,但是计算能力已经遇到了摩尔定律的瓶颈,所以,虽然硬件可以越做越小,但是CPU的计算能力却并不见得能变得更为强大。而可能是,今年的普通移动设备A,在明年会缩小,变成B。B的计算能力和A一样,只是变小了,而明年做成普通移动设备的C,计算能力会比B更强大一点,然后后年C也会缩小,变成D,D变成和C一样的计算能力,这样一代一代往下发展。
|
||||
|
||||
由于移动设备变得越来越小,那么小型移动设备上的游戏也会变得可观,比如智能手表上裸眼3D的小游戏,甚至就像科幻片里面,手表上的游戏投影在手臂上方,这种模式不再变得不可能。
|
||||
|
||||
我们之前说过,谷歌眼镜并不成功,并不是应用少的问题,而是场景的问题。试问谁会戴着眼镜到处跑,为了利用眼镜识别各种物件,而非常不自然地盯着某个物体看半天?其次,技术也不是特别成熟,上传数据到分辨并且得到信息是有时间差的,无法做到完美实时。
|
||||
|
||||
我们不妨做一个实验,打开手机摄像头,拍摄视频,你会看到视频中的影像比现实中大致慢半秒左右,这是由于视频抓取后呈现,流的压缩等各种手机端的计算占据了一定的时间,所以哪怕本地都无法做到完美实时,又如何将网络端交互变成实时的呢?
|
||||
|
||||
所以未来移动设备变得小的同时,做的应用和游戏也应该考虑到**互动效果**和**硬件**的制约因素。
|
||||
|
||||
移动设备并不只是指手机和PAD,眼镜、手表、车载导航之类的,也可以算是移动设备,这样很多游戏都可以放在不同的移动平台下,比如车载导航内的小游戏,比如手环上的简单游戏,都是发展的方向。
|
||||
|
||||
而AR和VR,体感游戏依然是移动端游戏的一个卖点,因为可以随时随地玩游戏,所以结合现实世界和虚拟世界类型的游戏将会越来越多,再结合地图定位,能玩转的游戏类型也会越来越多,如果能结合现实中的头戴式设备,比如类似谷歌眼镜的成熟产品,那么结合AR VR等的应用,将会变得非常生动和有意思。
|
||||
|
||||
前些年就有PokeMon之类的AR游戏风靡了一阵子,但是这类游戏,最主要是是结合了一个强大的IP之上,其次是新鲜感,当时去新鲜感后,如何让玩家保持继续玩下去的动力,就是游戏公司需要做的事情了。
|
||||
|
||||
**制约移动设备发展的,并不是技术本身,或者将芯片做小的能力,具体来说就是电池,** 不仅仅是移动设备,事实上各种设备上的制约因素都是电池,包括笔记本、电动汽车、无人飞机等等,只有解决了电源问题,科技才可能有质的飞跃。
|
||||
|
||||
如果我们有了大容量的电池且不增加额外电池尺寸开销的情况下,移动端游戏会有怎样的发展呢?
|
||||
|
||||
如果电池得到了发展,移动端游戏将会出现和PC端游戏一样的效果,比如玩3D游戏再也不需要半小时一个小时充一次电了,玩再久的游戏都只要两天或者更多天,才充一次电,这在现在是无法想象的,比如智能手表上的游戏,不可能一只手表玩了游戏后,一天充一次电,这实在是非常尴尬的事情。
|
||||
|
||||
## 小结
|
||||
|
||||
我们来总结一下今天的内容。
|
||||
|
||||
<li>
|
||||
移动端游戏将往更加精品、高画质、高品位的游戏转型。3D、VR、AR等游戏也会层出不穷,移动端和大屏幕之间的阻隔也会逐渐模糊,两边都可以互相游戏。
|
||||
</li>
|
||||
<li>
|
||||
另外,如果摆脱了电池的掣肘,那么移动端游戏将往PC端游戏的方向发展,更高质量的3D游戏也不用担心电池耗尽而半途无法玩了。
|
||||
</li>
|
||||
|
||||
给你留个小问题吧。
|
||||
|
||||
如果让你来开开脑洞,思考下移动游戏的未来发展方向,你认为移动游戏会怎么走下去呢?移动游戏的未来是往高品质高画质走下去,还是往真实与虚拟结合走下去呢?还是有其他的方向?
|
||||
|
||||
欢迎留言说出你的看法。我在下一节的挑战中等你!
|
63
极客时间专栏/从0开始学游戏开发/第六章:热点剖析/第36讲 | 热点剖析(九):谈谈独立开发者的未来发展.md
Normal file
63
极客时间专栏/从0开始学游戏开发/第六章:热点剖析/第36讲 | 热点剖析(九):谈谈独立开发者的未来发展.md
Normal file
@@ -0,0 +1,63 @@
|
||||
<audio id="audio" title="第36讲 | 热点剖析(九):谈谈独立开发者的未来发展" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/56/57/56e1610d3636fb5dd7b629ca8eae9f57.mp3"></audio>
|
||||
|
||||
我曾经看过这么一句话,**游戏开发是一门异常复杂的综合性艺术创作**。作为个人独立开发者,一个人常常需要包揽所有职责,策划、美工、原画,甚至推广。
|
||||
|
||||
说到推广,不得不提的就是发布平台。比如,我第一时间想到的就是Steam,这个由专门开发电子游戏的美国Valve公司开发的PC游戏界最大的发行平台。对于Steam,我想你应该非常熟悉了,我这里就不多介绍了。
|
||||
|
||||
但是,现在Steam的日子也并“不好过”,更别说独立开发者本身了。
|
||||
|
||||
以前,一个人在DOS下就可以编写出一款小游戏,一支三五人的小团队就可以做出一款游戏,现在来说几乎是不可能的。现代游戏需要大量人力物力去做一系列的基础工作,美术、关卡、引擎等等都是必不可少,甚至可能成为影响一款游戏成功与否的必要因素。即便你有特别优秀的创意,有非常突出的画面和故事情节,但是依旧很容易就被淹没在游戏海洋中。
|
||||
|
||||
为什么现在的游戏制作的难度越来越大?请注意是制作,不是开发,制作游戏不仅仅包含开发,还包含创意、资源调配、产品规划等等。不少人跟我讨论过这个问题,我自己从业的这么多年也一直在思考这个问题。
|
||||
|
||||
其实,并不是因为游戏开发的难度比先前更难,相反,现在开发游戏的难度,比DOS时代小多了。但是,游戏的制作却没有变得更简单。这是为什么呢?
|
||||
|
||||
DOS时代开发游戏,有一个好的idea后,最先要考虑的是DOS 16位的内存限制,因为很可能一不小心就崩溃了。到了DOS游戏后期时代,有了DOS4GW这种突破内存限制的“32位保护模式”的方式开发游戏。虽然可以几乎不用考虑内存限制,但是难度依然很高,要从头绘制鼠标箭头、点击事件。所有玩家在界面上能看到的和不能看到的,都要手工一行一行敲出来。
|
||||
|
||||
现在不同了,有了游戏引擎,只需要往引擎里填写需要的内容就可以了。很多情况下,鼠标箭头、UI点击事件,甚至图像载入,绘制这些底层操作都不需要你关心,游戏引擎一揽子都包装好了。
|
||||
|
||||
我曾经看过Steam游戏Descenders的创意总监Mike Rose的一篇采访,大致是说,现在在Steam上上架的游戏,利润大部分都被头部游戏赚取。
|
||||
|
||||
一个重要的原因是,Steam上的游戏越来越多,就像苹果商店,如果用户不搜索,基本不可能会有新游戏的展示和宣传位置。即便Mike Rose提议最好能整理游戏列表,能下架一系列没人买的僵尸游戏,这样一来就能给更多的新游戏以展示自己的机会,但是,Steam没有这么做或者说已经大势已去来不及挽回。所以,越来越多的开发者开始转向了主机游戏。
|
||||
|
||||
所以以目前的形式看,对于独立开发,我其实更看好主机游戏。
|
||||
|
||||
加上Switch、XBOX等主机游戏相继都推出了自己的独立游戏计划,吸引了很多Steam平台的独立开发者进入。尽管主机游戏并非是独立游戏开发者的第一选择,然而XBOX等的开放态度以及Steam平台的利益不平等,还是导致很多开发者流向了主机游戏。
|
||||
|
||||
我们开发的游戏,最常开发的分别为PC游戏、原生App游戏、HTML5游戏(不含PC的MMO游戏)、微信小游戏。
|
||||
|
||||
在微信小游戏的生态中,你只需要注册账号,并且使用游戏引擎导出到微信,并且申请游戏资质就可以上线运营了。
|
||||
|
||||
关于PC游戏,Steam依旧是最大的PC游戏商店平台。原生App游戏,苹果端就不说了,没有别的选择。而安卓端,国内有至少30个应用市场可以上架,所以走一圈上架流程、接入到平台API就是一个相当麻烦的过程。
|
||||
|
||||
如果要做原生安卓游戏,把主要精力放在几个大平台上就行了。HTML5游戏,也有可以选择的平台,比如比较出名的4399、4177等。
|
||||
|
||||
从收入情况看,苹果App的收费情况比安卓端更好,一个是用户付费习惯早已经在苹果端养成。另一个是苹果端游戏有审核(谷歌市场也有审核,但是没有苹果那么严格),所以游戏质量都能得到保证。
|
||||
|
||||
PC端的Steam市场也有较好的收费机制。而微信小游戏则是统一的广告、支付等渠道,用起来也比较方便。所以独立开发者可以选择对自己较为有利的方案进行针对性开发和推广,比如选择微信小游戏,或者苹果端游戏,如果自己的开发成本不是特别充裕,这是一个相对稳妥的选择。
|
||||
|
||||
不管是独立游戏开发还是别的,我个人觉得现在的游戏一定要有这样几个特点:轻、快、多。
|
||||
|
||||
首先,游戏体量要够轻,够小,打开手机,打开电脑翻开一个网页就能玩,玩完就走。
|
||||
|
||||
其次,游戏体验要快速。一盘游戏不能时间太久,一局超过十分钟就会逐渐变成重度游戏,除非有很强的吸引力,否则时间太久的游戏大多数人都不愿意尝试。
|
||||
|
||||
游戏版本一定要不停迭代。从玩法、画面,到平衡性,这样才会让玩家保持新鲜感,不停地被游戏粘滞住。
|
||||
|
||||
## 小结
|
||||
|
||||
这节我和你聊了独立开发者的未来发展。
|
||||
|
||||
<li>
|
||||
DOS时代的时候,一个人或者一个小团队就可以做出一款游戏,但是这种时代已经过去了。游戏开发难度变小了,但是游戏制作难度变得越来越大了。
|
||||
</li>
|
||||
<li>
|
||||
尽管Steam依旧是目前最大的发布平台,但是由于它本身没有对上架的游戏进行分类、整理,有选择的展示。对独立开发者其实是不利的。加上Switch、XBOX等主机游戏相继都推出了自己的独立游戏计划,我其实更看好主机游戏的发展。
|
||||
</li>
|
||||
<li>
|
||||
其实不管基于什么平台,把游戏本身做好,才是最重要的。
|
||||
</li>
|
||||
|
||||
你想成为一个独立游戏开发者吗?你想做出一款什么样的游戏?
|
||||
|
||||
欢迎留言说出你的看法。我在下一节的挑战中等你!
|
Reference in New Issue
Block a user