开发和优化Android 游戏应用

trpewwbg 2014-04-29 11:15:33
加精
Android 原生开发套件 (NDK) 是 Android SDK 的附带工具。借助该工具,您可以使用诸如 C 和 C++ 等本地代码语言实现部分应用。

您可以从以下网址下载该 NDK 工具包: http://developer.android.com/tools/sdk/ndk/index.html

适合 X86 指令集架构的 NDK
Android 是一个由 Google 开发的开源操作系统。 当前,Android 可以在三种指令集架构上运行: ARM、x86 和 MIPS。 X86 表示一组基于英特尔 8086 CPU(自 1978 年开始使用)的指令集架构。我们现在从应用程序的角度介绍 X86 (也称为英特尔 架构,或 IA) 和其他 Android 可以运行的芯片组之间的差异。

Android 应用可被分成两类:
* 包含 Java* 代码和仅使用 Android 官方 SDK API 和必要资源文件(诸如 .xml 和 .png)的 Dalvik 应用,可编译成一个 APK 文件。
* 包含 Java 代码、资源文件、C/C++ 源代码(有时也包含汇编码)的 Android NDK 应用。 所有本地代码被编译成一个动态链接库 (.so 文件),然后在主程序中通过使用 JNI 机制的 Java 进行调用。

Android 游戏引擎
游戏引擎是游戏应用的一个重要模块。 有几个引擎可以在 Android 上运行,其中包括一些开源的商用 2D 和 3D 引擎。 因此,我们很难将 Android 游戏迁移到 IA 平台上,也难以在这种平台上开发 Android 游戏。 Cocos2d-x 和 Unity 3D 是 Android 平台最受欢迎的游戏引擎。

Cocos2d-x 基于 Cocos2d-iPhone 构建而成,包含各种扩展支持平台,同时还有多种可以共享同一种 API 结构的编程语言。 自 2010 年 7 月开始使用以来,cocos2d-x 下载的次数已经超过了 5 亿次。 包括 Zynga、Glu、GREE、DeNA、Konami、TinyCo、Gamevil、HandyGames、Renren Games、4399、HappyElements、SDO 和 Kingsoft 在内的著名手机游戏公司正在使用 cocos2d-x。

Unity 3D 是一个跨平台的游戏引擎,内建有 Unity Technologies 公司开发的 IDE。 我们可以使用它开发适合 web 插件、台式机平台、控制台和移动设备的视频游戏。迄今为止,已经有超过一百万的开发人员使用过该引擎。 2005 年时,它只是一个 OS X 支持的游戏开发工具,现在,它已经成长为一个多平台游戏引擎。 最新的更新 Unity 4.1 于 2013 年三月发布。它现在可以支持 iOS、Android、Windows、Blackberry 10、OS X、Linux、web 浏览器、Flash*、PlayStation 3、Xbox 360、Windows Phone 和 Wii 的应用开发。

在 IA 平台上开发基于 NDK 的游戏
在我们讨论游戏开发之前,我们应当先讨论 Android 平台。 如您所知,游戏有着多种不同的风格。 不同风格的游戏需要不同的设计原理。 在您的项目开始前,您应当先为您的游戏确定风格。 如果您不能想出全新的和前所未见的思路,那么很可能您的游戏思路就会因为效仿当前流行风格而变得普通。 大多数的风格已经成为了机械的游戏标准(例如控制方案、具体目标等)。 而偏离这些标准则可能让您的游戏变得与众不同,因为游戏玩家总会期待出现新的事物。 一些常见的风格包括:
* 街机与动作
* 益智解密
* 纸牌与赌场
* 休闲
* 动态壁纸
* 竞赛
* 体育游戏
* 小游戏
* 等等
开发普通 Android 游戏的过程和任何其他的 Android 应用相类似。 首先,从 Google 的网站下载 Android SDK 和 NDK,然后进行正确安装。

我假设您已经完成了所有的安装和准备工作。 我们以 Cocos2d-x 游戏引擎为例,说明如何为英特尔人架构创建一款游戏。

下载 Cocos2D-x
从以下网站下载稳定、最新的 Cocos2D-x 版本: http://www.cocos2d-x.org/projects/cocos2d-x/wiki/Download

执行批处理
执行来自 Windows Explorer 的批处理任务。 当它询问你项目位置时,请把它设置成像 com.yourproject.something 一样的格式,并选择项目名称和目标 ID。这将在 cocos2dx 安装文件夹中创建一个以项目名称的名称的文件夹。 您应当参考无错式脚本的执行情况,具体如下:


设置 NDK_ROOT 的环境变量
将以下环境变量添加到 home\<yourname>\.bash_profile 文件的结尾处(在本案例中:c:\cygwin\home\user\.bash_profile):

NDK_ROOT=/cygdrive/<yourname>/

export
NDK_ROOT


重启 cygwin,输入 cd $NDK_ROOT,您会看到该屏幕:

执行 build_native.sh 文件
默认的配置是 ARM;我们需要改变配置,使其符合 x86 的编译要求。 打开 \helloworld\proj.android \build_native.sh 文件,找到 ndk-build 命令,将 APP_ABI=x86 参数添加到该命令的结尾处。 在 Cygwin 中运行它,您会看到:

把项目导入到 Eclipse
现在转至 Eclipse,创建一个新的项目 -> 从现有项目导入。

构建并运行
到该步骤时,Eclipse 将会出现一些问题:

导入问题 org.cocos2dx.lib 不能被解析为 HelloWorld.java

/HelloWorld/src/com/young40/test 第 26 行 Java 问题 Cocos2dxActivity 不能被解析为 HelloWorld.java 类型

/HelloWorld/src/com/young40/test 第 30 行 Java 问题 Cocos2dxActivity 不能被解析为 HelloWorld.java 类型

/HelloWorld/src/com/young40/test 第 33 行 Java 问题

你必须将下列库导入到 Eclipse 中:

cocos2d-2.1beta3-x-2.1.1/cocos2dx/platform/android/java

转至 Project -> Build,然后运行 As -> Android Application:

然后将针对 cocos2dx 游戏引擎构建一个游戏框架。 您可以将游戏逻辑、音频、图片等资源添加到该项目中,使其成为一款完整的游戏。

请点击这个链接阅读详细介绍:http://g.csdn.net/5268778
...全文
2774 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
ehmonfhtcojh 2014-05-08
  • 打赏
  • 举报
回复
真是不错的文章
繁华灬似梦 2014-05-05
  • 打赏
  • 举报
回复
初学者....
罗捷捷 2014-05-05
  • 打赏
  • 举报
回复
楼主大叔 现在都是python编译了 cygwin在win7+因为权限 问题很多...
  • 打赏
  • 举报
回复
yaojunyi3721 2014-05-04
  • 打赏
  • 举报
回复
不错,很好,学习了
austin9972 2014-05-02
  • 打赏
  • 举报
回复
Rocloud 2014-05-02
  • 打赏
  • 举报
回复
在英特尔® 架构平台上开发和优化基于 NDK 的 Android 游戏应用,
Wvelb7 2014-05-01
  • 打赏
  • 举报
回复
大神,好膜拜,真厉害
寂空冷 2014-04-30
  • 打赏
  • 举报
回复
不明觉厉!!!
laxila 2014-04-30
  • 打赏
  • 举报
回复
真是不错的文章
moon8150 2014-04-30
  • 打赏
  • 举报
回复
不错的文章 ,值得推荐
line_us 2014-04-29
  • 打赏
  • 举报
回复
cocos2dx 游戏引擎构建一个游戏框架。
rgllsj 2014-04-29
  • 打赏
  • 举报
回复
太好了,真的太好了
wangsufu77 2014-04-29
  • 打赏
  • 举报
回复
正好要学习,nice
shwan521 2014-04-29
  • 打赏
  • 举报
回复
太好了,真的太好了
zhu_neal 2014-04-29
  • 打赏
  • 举报
回复
太好了,真的太好了
jh51464 2014-04-29
  • 打赏
  • 举报
回复
文章很好,值得一看
xsc65092 2014-04-29
  • 打赏
  • 举报
回复
不错的文章 ,值得推荐
CCDDzclxy 2014-04-29
  • 打赏
  • 举报
回复
不明觉厉啊
cdh15866336633 2014-04-29
  • 打赏
  • 举报
回复
真是不错的文章
加载更多回复(4)
很好的电子书教程! 什么是 Android? Android是一个专门针对移动设备的软件集,它包括一个操作系统,中间件和一些重要的应用程序。Beta 版 的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备优化 • 集成的浏览器 基于开源的 WebKit 引擎 • 优化的图形库 包括定制的2D 图形库,3D 图形库基于 OpenGL ES 1.0 (硬件加速可选) • SQLite SQLite SQLite SQLite 用作结构化的数据存储 • 多媒体支持 包括常见的音频、视频和静态图像格式 (如 MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF) • GSM GSM GSM GSM 电话技术 (依赖于硬件) • 蓝牙 Bluetooth, Bluetooth, Bluetooth, Bluetooth, EDGE, EDGE, EDGE, EDGE, 3G, 3G, 3G, 3G, 和 WiFi WiFi WiFi WiFi(依赖于硬件) • 照相机,GPS GPS GPS GPS,指南针,和加速度计(accelerometer accelerometer accelerometer accelerometer) (依赖于硬件) • 丰富的开发环境 包括设备模拟器,调试工具,内存及性能分析图表,和 Eclipse 集成开发环境插件 应用程序 Android 会同一系列核心应用程序包一起发布,该应用程序包包括 email 客户端, SMS 短消息程序,日历, 地图,浏览器,联系人管理程序等。所有的应用程序都是使用 JAVA 语言编写的。 应用程序框架 开发人员也可以完全访问核心应用程序所使用的 API 框架。该应用程序的架构设计简化了组件的重用;任何 一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框 架的安全性限制)。同样,该应用程序重用机制也使用户可以方便的替换程序组件。 隐藏在每个应用后面的是一系列的服务和系统, 其中包括; • 丰富而又可扩展的视图( Views),可以用来构建应用程序, 它包括列表(lists),网格( grids), 文 本框(text boxes),按 钮 (buttons), 甚至可嵌入的 web 浏览器。 • 内容提供器(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或 者共享它们自己的数据 • 资源管理器(Resource Manager)提供 非代码资源的访问,如本地字符串,图形,和布局文件( layout files )。 • 通知管理器 (Notification Manager) 使得应用程序可以在状态栏中显示自定义的提示信息。 4 • 活动管理器( Activity Manager) 用来管理应用程序生命周期并提供常用的导航回退功能。 程序库 Android 包含一些 C/C++库,这些库能被 Android 系统中不同的组件使用。它们通过 Android 应用程序框架 为开发者提供服务。以下是一些核心库: • 系统 CCCC 库 - 一个从 BSD 继承来的标准 C 系统函数库( libc ), 它是专门为基于 embedded linux 的设备定制的。 • 媒体库 - 基于 PacketVideo OpenCORE;该库支持多种常用的音频、视频格式回放和录制,同时支持 静态图像文件。编码格式包括 MPEG4, H.264, MP3,AAC, AMR, JPG, PNG 。 • Surface Surface Surface Surface Manager Manager Manager Manager - 对显示子系统的管理,并且为多个应用程序提 供了2D 和3D 图层的无缝融合。 • LibWebCore LibWebCore LibWebCore LibWebCore - 一个最新的 web 浏览器引擎用,支持 Android 浏览器和一个可嵌入的 web 视图。 • SGL SGL SGL SGL - 底层的2D 图形引擎 • 3D3D3D3D libraries libraries libraries libraries - 基于 OpenGL ES 1.0 APIs 实现;该库可以使用硬件 3D 加速(如果可用)或者使用高 度优化的3D 软加速。 • FreeType FreeType FreeType FreeType -位图(bitmap)和矢量(vector)字体显示。 • SQLite SQLite SQLite SQLite - 一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。 Android Android Android Android 运行库 Android 包括了一个核心库,该核心库提供了 JAVA 编程语言核心库的大多数功能。 每一个 Android 应用程序都在它自己的进程中运行,都拥有一个独立的 Dalvik 虚拟 机实例。Dalvik 被设计 成一个设备可以同时高效地运行多个虚拟系统。 Dalvik 虚拟机执行(.dex)的 Dalvik 可执行文件,该格式文 件针对小内存使用做了 优化。同时虚拟机是基于寄存器的,所有的类都经由 JAVA 编译器编译,然后通过 SDK 中 的 "dx" 工具转化成.dex 格式由虚拟机执行。 Dalvik 虚拟机依赖于 linux 内核的一些功能,比如线程机制和底层内存管理机制。 Linux Linux Linux Linux 内核 Android 的核心系统服务依赖于 Linux 2.6 内核,如安全性,内存管理,进程管理, 网络协议栈和驱动模型 。 Linux 内核也同时作为硬件和软件栈之间的抽象层。 5 建立 Android Android Android Android 开发环境 ① 下载 JDK 5 or JDK 6 (JRE alone is not sufficient) ->安装->设置环境变量 JAVA_HOME CLASSPATH path ② 下载 Eclipse 3.3 (Europa), 3.4 (Ganymede) IDE for JAVA->解压 ③ 下载 Android SDK 解压-> path 里加入 SDK 包中的 tools 目录全路径 ④ 下载 ADT 0.8.0 解压 ⑤ 打开 Eclipse 安装 ADT 插件 Android Android Android Android 的系统架构 系统构架 6 支持的功能 + Application framework: 可重用的和可替换的组件部分,在这个层面上,所有的软件都是平等的。 + Dalvik virtul machine: 一个基于 Linux 的虚拟机。 + Integrated browser: 一个基于开源的 WebKit 引擎的浏览器,在应用程序层。 + Optimized graphics: 包含一个自定义的2D 图形库和基于 OpenGL ES 1.0 标准的3D 实现。 + SQLite: 数据库 + Media support: 通用的音频,视频和对各种图片格式的支持(MPEG4, H.264, MP3,AAC, AMR, JPG, PNG, GIF) + GSM Telephony: GSM 移动网络, 硬件支持。 + Bluetooth, EDGE, 3G, and WiFi: 都依赖于硬件支持。 + Camera, GPS, compass, and accelerometer: 都依赖于硬件支持。 + Rich development environment: 包含一套完整的开发工具集,方便跟踪调试,内存检测和性能测试,而且 提供了 Eclipse 的插件。 最底层的是一个 Linux Kernel,加载了几个移动设备必要的系统驱动(这么说来 Android 基础系统是要以 GPL 发布了?不知道 34 家厂商的硬件开发商们是怎么样想的);上面是类库和 Runtime,绿色的类库部分可以看 到大名鼎鼎的 SQLite,这个软件甚至声称自己属于公共领域(比 MIT License 还要强 @@),字体 FreeType 是 BSD-style License 的,图形库 OpenGL ES 只需通过产品测试,无偿使用于产品。再向上看是应用层的东西 了,这里可以做的事情就非常多了,各个社区,各个厂家都可以参与进来。难怪 Android 的 sdk 可以 Apache License 发布了,对企业和开发人员友好啊。 那么 Google 自己的东西在哪里呢?没错,就是右边那个 runtime, 最吸引技术人员的就是这个 runtime(注意,这个才是 Android 的 核 心 )。Google 为它准备了一个虚拟机,叫 做 Dalvik。这个让人摸不着头脑的东西的到底是什么?从开发平台上我们清清楚楚地得到了答案:Java Android Android Android Android 学习方法 ① 了解什么是 Androi ② 建立开发环境 ③ 阅读 SDK 文档 ④ 背景知识 � Java � 面向对象 � 设计模式 � J2ME、Brew 、Symbian

567

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧