You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

88 lines
8.5 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 第31讲 | 热点剖析(四):安卓端和苹果端游戏开发有什么区别?
所谓的移动端指的是可以随时拿在手上游戏和工作的自带直流电源的设备所以从游戏角度讲手机、掌上游戏机、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里面有几个比较常用的类
* SKSpriteNode用来绘制精灵的纹理
* SKLabelNode ,文本渲染类;
* SKVideoNode视频播放的类
* SKEmitterNode粒子系统的创建和渲染
* SKShapeNode基于Core Graphics 路径形状的渲染;
* SKEffectNode使用遮罩来裁剪子节点的类。
因为是苹果公司推出的2D游戏引擎所以你可以在苹果的机器上编写和调试代码并且在iPhone上进行预览和测试。
在编写游戏的过程中安卓使用工具是Android Studio而苹果使用的是XCode等编程工具。除了苹果特有的游戏库之外有不少通用的游戏引擎也可供选择比如Cocos2d-x之类的在这两个平台都能编写比如Unity比如libGDX游戏库也是目前在安卓、苹果上编写游戏适合选择的一个游戏库。
所以如果使用跨平台的游戏引擎,**在两大平台下开发,除了开发语言的区别之外,底层的内容并没有什么区别**比如Cocos2d-x、libGDX等等都是跨平台生成不同目标代码的引擎。
我们继续拿libGDX来做说明。libGDX兼容多种平台系统自然也包括安卓和苹果。
这款引擎兼容性强为调试和开发提供了便利。为什么这么说呢你可以在电脑上编写测试和调试游戏但是不需要打开安卓模拟器。开发应用的同学应该知道安卓应用一般是在电脑上编写、测试、调试并且到模拟器或者安卓硬件上进行预览运行但是libGDX解决了这个问题你可以直接在桌面上进行开发测试和调试。
libGDX引擎是由audio音频操作、files文件读取、graphics2D/3D图像、math数学绘图运算、physicsBox2D物理引擎封装、scenes2D/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来编写苹果和安卓的游戏当然如果你编写的是网络游戏那么服务器端就需要你自己来编写。
## 小结
我来总结一下今天的内容。
* 从游戏角度讲手机、掌上游戏机、iPad都属于移动端设备。而进入智能机时代之后掌上游戏机逐渐退居幕后成为少部分游戏发烧友的选择。
* 安卓端和苹果端在开发游戏中的区别主要体现在开发语言上。苹果系统大量使用Objective-C、Swift而安卓大量使用的是Java。
* 之后我介绍了苹果端的比较流行的引擎SpriteKit以及适用于各种平台的libGDX。使用libGDX在各个平台编写出的游戏表现几乎是一样的除了执行效率或者耗电水平会有细微的差别但这和引擎其实关系不大。
最后给你留一个小问题。你知道什么是2D骨骼游戏吗能否举个例子
欢迎留言说出你的看法。我在下一节的挑战中等你!