文档库 最新最全的文档下载
当前位置:文档库 › Android 3D游戏开发技术详解与典型案例01

Android 3D游戏开发技术详解与典型案例01

Android 一词的本义指“机器人”,同时也是Google 于2007年11月5日宣布的基于Linux 平台的开源手机操作系统的名称。该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。

话说天下之势分久必合、合久必分,手机市场也从当年的单一非智能平台发展到了如今的群雄割据的局面。Android 、iPhone 无数的光环围绕在这两颗新星周围。

1.1.1 手机市场的两颗新星

2007年1月9日,iPhone (如图1-1所示)的诞生开创了移动设备软件尖端功能的新纪元,其重新定义了移动电话的功能,个人数码助理、媒体播放器、无线通信设备、多点触控技术、感应器、10万种的软件应用,苹果似乎总是可以把下个世纪的产品带到这个世纪来,乔布斯再次创造了新的神话。

图1-1 iPhone 手机 图1-2 G1手机

第1章 英雄还看今朝—Android 简介

21

但是紧邻其后,2007年11月5日Google 宣布了一个基于Linux 平台的开源手机操作系统—Android ,该平台由操作系统、中间件、用户界面和应用软件组成,是首个为移动终端打造的真正开放和完整的移动软件。如图1-2所示,为第一款搭载Android 平台的手机G1。

1.1.2 手机操作系统的5大元老

与此同时手机操作系统的几大元老们—Symbian 、Windows 、Palm OS 、Linux 和BlackBerry OS 似乎也在寻求转型之路以适应新的市场。

以Nokia 为主导的Symbian 操作系统是当今手机市场的霸主,其市场占有率一直稳居榜首。但是各项数据都表明Symbian 的市场占有率在被Android 、iPhone 等新兴的操作系统蚕食,Nokia 自身也意识到了这一点,在2008年10月2日其发布了装载全新操作系统的Symbian S60 V5版本的Nokia 5800 XpressMusic 手机,如图1-3所示,这也意味着Android 、iPhone 等新兴的操作系统让Nokia 已经有些坐立不安了。

Microsoft 自己声明要将Windows Mobile 重新设计,也从侧面反映了除新设计的Windows Mobile 7以外的其他WM 产品,已经不能适应市场的需求,如图1-4为搭载Windows Mobile

6.5 Professional 的HTC HD2

手机。而MOTO 全面转向Android 平台,也让Linux

似乎显得更加形单影只,Palm OS 及BlackBerry OS 似乎一直也没搭上中国手机市场繁荣发展的顺风车,甚至在中国市场的知名度都不是很高。

图1-3 Nokia 5800 XM 手机 图1-4 为HTC HD2手机

Android 3D 游戏开发技术详解与典型案例

22

在Google 中输入Android ,可以获得11亿条以上的结果,大部分是关于技术的文章、新软件的发布、市场占有率的提升等,基本上都是Android 的正面消息。而打开招聘网站,Android 的程序员需求与日俱增,无数的消息都在告诉我们:Android ,你就是下一代移动平台的霸主。

1.2.1 得中国市场者得天下

2010年5月27日手机广告公司AdMob 发表报告称:中国市场上Android 手机销量超过苹果iPhone 。而在仅仅的2个月后《福布斯》杂志网络版周二刊文指出Android 手机销量将达到iPhone 销量的3倍。

另一方面,Android 更加贴近中国公民的购买力,Android 为不同层次的消费群体量身定做了属于他们的产品。而软件方面,Android 的软件从无到有,在到现在几乎所有的手机软件都能找到Android 版本。Android 在中国市场的脚步越走越快。

中国拥有全世界最多的人口,中国的经济发展速度如日中天,得中国市场就得到了天下五分之一的市场,Android 在中国正在阔步前进,未来一片光明。

1.2.2 全新的概念带来全新的体验

平台的开放性,应用程序间的平等性,无界限、快速方便的应用程序开发,不管是给用户还是给应用程序开发人员,都带来了全新的体验。

Android 是一个真正意义上的开放性移动开发平台,其不仅仅包含上层的用户界面和应用程序,还包括底层的操作系统。所有的Android 应用程序都运行在虚拟机上,程序之间是完全平等的,用户可以随意将第三方软件置换掉系统自带的系统软件。

一个应用程序不但可以通过API 访问系统提供的功能,还可以声明自身的功能供其他应用程序调用。同时Android 为开发人员提供了大量的适用库和工具,使得开发人员可以快速创建自己的应用程序。

本节主要讲解基于Eclipse 的Android 开发环境的搭建,及模拟器的创建和运行。

1.3.1 SDK 的安装及环境配置

构建Android 的平台,首先要安装Java 的JDK 和配置环境变量。具体步骤如下。 登录Oracle 网站https://www.wendangku.net/doc/435548076.html,/technetwork/java/javase/downloads/index.html ,

第1章 英雄还看今朝—Android 简介

23

下载最新的JDK 安装程序。

双击下载的JDK 安装包,将其安装到默认目录(用户也可自己定制)下。

右击“我的电脑”图标,选择属性?高级?环境变量命令,添加path 变量,值设置为:C:\Program Files\Java\jdk1.6.0\bin 。

在环境变量中配置JA V A_HOME ,在系统变量中添加JA V A_HOME ,值设为:C:\Program Files\Java\jdk1.6.0。

在安装完JDK 后,就需要下载及安装Android SDK 。具体步骤如下。

登录https://www.wendangku.net/doc/435548076.html, 页面下载最新的SDK ,本书使用的版本是2.1。读者也可以自行下载其他版本,安装类似。

将下载好的SDK 压缩包解压到硬盘目录下,在环境变量中配置参数,配置系统变量path 的值为:C:\Program Files\android-sdk-windows\tools 。至此环境变量配置完成,单击确定按钮完成配置。

1.3.2 Eclipse 集成开发环境的搭建

在完成了SDK 的安装及配置后,读者就可以安装及配置Eclipse 集成开发环境了,具体步骤如下。

首先登录Eclipse 官网https://www.wendangku.net/doc/435548076.html,/downloads/,下载Eclipse ,笔者使用的是3.5.2版。

将下载完的Eclipse 安装包解压到硬盘下,双击eclipse.exe 文件打开Eclipse 。 在Help 菜单中选择Install New Software ,如图1-5所示,进入Install 界面。

接下来安装ADT ,在Install 界面中单击

Add 按钮,在Name 中可输入任意名字,笔者输入的是:Android adt ,在

Location 中输入:https://www.wendangku.net/doc/435548076.html,/android/ eclipse/,如图1-6所示。

图1-5 安装新软件 图1-6 安装ADT 在Install 界面选中Developer Tools 并单击Next 按钮。安装完后,在弹出的界面中,

Android 3D 游戏开发技术详解与典型案例

24

直接单击Finish 按钮,重启Eclipse ,至此完成了ADT 的安装。

重启Eclipse 后,选择Window 菜单中的Preferences 命令,打开Preferences 界面。 在Preferences 界面中单击Browse 按钮,添加Android SDK ,如图1-7所示。

图1-7 在Eclipse 中添加Android SDK

至此,在Eclipse 中就成功安装和配置了Android SDK 。

1.3.3 模拟器的创建和运行

成功安装和配置Android SDK 后便可以创建和运行Android 模拟器了。在Eclipse 中单击Opens the Android SDK and A VD Manager 按钮(如图1-8所示),打开Android SDK and A VD Manager (如图1-9所示)。

图1-8 Opens the Android SDK and A VD Manager 按钮

打开Android SDK and A VD Manager 后单击New 按钮,弹出Create new Android Virtual Device (A VD )对话框,在其中输入模拟器的名字,笔者输入的是Android2_1。Target 选择Android 2.1 –API Level 7,设置模拟器的版本为Android 2.1。SD Card 中Size 设置为50,即创建50MB 的SD 卡。在Built-in 中选择分辨率,笔者选择的是默认分辨率HVGA ,如图1-9所示。

配置完成后,单击Create A VD 按钮,然后回到Android SDK and A VD Manager 界面,之后选中刚刚创建的模拟器,单击Start 按钮,运行模拟器。

第1章 英雄还看今朝

—Android

简介

25

1-9 A VD 设置

如图1-10所示为Android 模拟器界面。至此基于Eclipse 环境的Android 平台搭建成功。

图1-10 Android 模拟器

千里之行始于足下,相信大部分读者在学习Java 时也是从Hello World 开始的。本小节讲述如何在Android 中写自己的第一个Hello World 程序,及简单介绍一下Android 应用程序的调试。

Android 3D 游戏开发技术详解与典型案例

26

1.4.1 第一个Android 程序

打开Eclipse ,依次选择File →New →Android Project 命令来创建一个新的Android 项目。如图1-11所示,创建Sample1_1程序,具体步骤如下。

在Project name 中输入项目名称,笔者输入的是Sample1_1。

在Build Target 中选择项目的版本,本书中均使用Android 2.1版本。

在Application name 中输入程序的名称,笔者输入的是Sample1_1。

在Package name 中输入程序的包名,笔者输入的是wyf.zcl 。

选中Create Activity 复选框,让系统帮我们创建一个Activity ,输入Activity 名称,笔者输入的是MyActivity 。

图1-11 创建Sample1_1程序

提示:在Package name 中输入的包名,必须是两级以上的包名。

设置完成后单击Finish 按钮,在Project Explorer 中则会自动增加一个项目包。项目包中每个文件夹及其文件的作用在下一小节中笔者会一一分析,这里还是先继续Sample1_1程序。

首先展开项目包,找到values 文件夹,打开其中的strings.xml 文件,如图1-12所示,添加字符串资源。

在strings.xml 左下角有两个视图,Resources 与strings.xml ,前者所见即所得,后者通过xml 文件添加字符串资源。笔者这里将介绍后者。

Hello World, MyActivity!一行删除,该行是默认情

第1章 英雄还看今朝—Android 简介

27况下Activity 中显示的字符串信息。然后在标记前添加代码Hello World, lost in android

单击运行按钮,如图1-13所示,运行我们第一个程序。

图1-12 strings.xml 位置

图1-13 运行程序按钮

运行效果如图1-14所示。

图1-14 第一个Sample1_1程序的运行效果

提示: 选择自动创建Activity ,是让开发环境帮我们创建,省去我们一些不必要的工作,

读者也可以自己创建一个类继承Activity 。在项目生成后,读者可自己运行一下,观看系统默认情况下生成程序的效果。

1.4.2 Android 应用程序的调试

Android 为我们提供了一个强大的调试工具DDMS ,通过DDMS 可以调试并监控程序的运行。Android 除了可以用System.out.println(“…”);语句来打印输出外,还为我们提供了另外一个类android.util.Log 来调试程序。下面就为大家一一讲解两种方法的使用方法。

首先讲解在Java 中十分熟悉的System.out.println();方法进行打印输出,具体步骤如下。 首先创建一个新的项目,项目名及程序名为Sample1_2,Activity 名为MyActivity 。 项目创建成功后,依次打开src 文件夹下的wyf.zcl 包中的MyActivity.java 文件。 然后在setContentView(https://www.wendangku.net/doc/435548076.html,yout.main);下面添加一句代码:System.out.println("first System.out.println");

运行程序,便可在DDMS 中观看效果了。

Android 3D 游戏开发技术详解与典型案例

28 提示: 默认情况下,DDMS 的按钮是隐藏的,读者需要通过

Open Perstective 来添加

DDMS

通常Open Perstective

在开发环境的右上角,如图1-15所示。

图1-15 Open Perstective 和DDMS 按钮 图1-16 DEBUG 按钮 打开DDMS ,找到LogCat

面板,单击DEBUG 按钮,如图1-16所示,在Log 选项卡中可以找到我们刚刚打印的语句了,如图1-17所示。

图1-17 Log 面板打印输出

如果读者觉得在Log 中有太多信息,也可以在LogCat 中添加一个专门输出System.out 信息的面板。单击

DEBUG 按钮后面的加号,会弹出Log Filter 面板,在Filter Name 中输入过滤器名称,在by Log Tag 中输入过滤的内容,如图1-18所示。

图1-18 过滤器设置

提示: 在过滤器内容一项中,因为程序是使用System.out.println()进行输出的,但有时可

能用System.out.print()输出,所以此处笔者设置为System.out 。

此时可以再次运行,观看效果,如图1-19所示。

第1章 英雄还看今朝

Android 简介

29

图1-19 System.out 输出面板

当然除了我们熟悉的System.out 外,Android 还为我们提供了另外一个类android.util. Log 进行打印输出调试,下面介绍Log 类的使用,步骤如下。

在PrintDemo 例子中注释我们刚刚添加的System.out.println("first System.out.println");,然后在后面添加代码Log.d("TAG", "first Log");

运行程序,在DDMS 中找到LogCat 面板,切换到Log 页面,观看打印的内容,如图1-20所示。

图1-20 Log 输出内容

提示: public static int d (String tag, String msg)方法为打印输出,tag 为输出的标签,mag 为

输出的信息内容。使用该方法还需要导入import android.util.Log 包。

两种输出各有优缺点,读者可在日后的学习中慢慢体会,看情况选择。

前几个小节介绍了Eclipse 集成环境的安装和配置,以及简单的Android 应用程序的创建及调试功能,接下来将简要介绍一下Android 应用程序运行的内部机制。

Android 3D 游戏开发技术详解与典型案例

30

1.5.1 Android 应用程序的项目结构

上一小节的两个例子读者已经知道了,通过Android SDK 可以自动生成一个项目包,但是没有对项目包里的内容进行介绍,本小节对项目包中的内容进行一一介绍,项目包如图1-21所示。

图1-21 Android 应用程序项目结构

src 源代码目录:该目录存放Android 应用程序所有的源代码。该目录项有不同的包,包中对应我们开发的源程序,我们开发的主要精力都集中在开发src 目录下的内容。

gen 文件夹目录:该目录存放了Eclipse 的ADT 插件自动生成的R.java 文件。实际上R.java 定义了一个R 类,它包含了应用中用户界面、图像、字符串等各种资源与之相对应的资源编号(id ),这些资源编号都是系统自动生成的,即有一个资源对象,系统就为此在R 类中生成相应的资源编号,好比一本字典。 提示: Android 应用程序中通过R 类别来实现对资源的应用。同时,编译器也会查看这个

资源列表,没有使用到的资源就不会编译进去,为手机应用程序节省空间。

res 资源目录:该目录下定义了drawable 、layout 及values 3个目录,下面对这3个目录一一进行介绍。

drawable 目录:该目录下有drawable-hdpi 、drawable-ldpi 、drawable-mdpi 3个文件夹分别用来存放不同分辨率的图片资源,用于不同分辨率的手机的开发,开发人员可以通过Resource.getDrawable(id)获得该资源。

layout 目录:该目录下包含了所有使用XML 格式的界面描述文件。主要用于表述应用程序的用户界面布局,也用于描述用户界面和接口组件。一般一个用户界面布局一个XML 文件。

values 目录:该目录包含了使用XML 格式的参数描述文件,读者可以在此添加一些额外的资源如字符串(string.xml )、颜色(color.xml )、样式(style.xml )和数组

第1章 英雄还看今朝—Android 简介

31

(arrays.xml )等。主要用于在代码中通过R 类来调用它们,而不直接使用,这样就可将代码和资源分开管理,便于维护。

除了以上文件夹外,还有一个AndroidManifest.xml 文件,它是系统的控制文件,告诉系统如何处理创建的所有顶层组件,尤其是Activity 、Intent 、Service 及ContentProvider ,凡是需要用到的组件都要在此注册。同时,该文件也是所有Android 应用程序都需要的文件,其描述了程序包的全局变量,包括公开的应用程序组件和每个组件的实现类,什么样的数据可以操作,在什么地方可以运行等。

提示: 除上述功能以外,在AndroidManifest.xml 文件中也可以指定权限、安全控制及测试,

这些功能在以后的开发中会经常用到。

1.5.2

Android 应用程序的系统架构

从软件分层的角度看,Android 平台由应用程序、应用程序框架、Android 运行时、系统库,以及Linux 内核构成,如图1-22所示。

图1-22 Android 系统框架

通过图1-22,我们能够大致了解Android 的系统框架,下面就一一讲解每一部分。

Android 3D 游戏开发技术详解与典型案例

32

1.5.3 Android 应用程序框架

Android 应用程序框架是进行Android 开发的基础,开发人员的大部分时间也是在这一层进行的,应用程序框架包含了视图系统、活动管理器、通知管理器、内容提供者、窗口管理器、位置管理器、资源管理器、电话管理器和包管理器9大部分,如图1-23所示。

图1-23 应用程序框架

应用程序框架的各部分具体功能如下所列。

活动管理器(Activity Manager ):管理所有的应用程序生命周期,以及通常的导航返回栈。

窗口管理器(Window Manager ):管理所有的窗口程序。

内容提供者(Content Provider ):用来让应用程序之间互相存取/分享数据。例如,某个应用程序可以存取联系人应用程序内的联系人数据。

视图系统(View System ):用来构建应用程序的基本组件,包含了列表、网格、文本框和按钮等。

包管理器(Package Manager ):用来进行Android 系统内的程序管理。

电话管理器(Telephone Manager ):用来管理所有的移动设备的功能。

位置管理器(Location Manager ):用来提供位置服务。

资源管理器(Resource Manager ):提供各种资源让应用程序使用,比如本地化字符串、图片、布局文件。

通知管理器(Notification Manager ):使应用程序可以在状态栏应用程序中显示警告信息。状态栏通常在手机的顶部,比如短信、语音邮件提示就会显示在这里。

提示:Android 平台的应用程序平等和无界限等特性就是由应用程序框架来保证的。

1.5.4 Android 运行时

Android 运行时包括核心库和Dalvik 虚拟机两部分,如图1-24所示,接下来我们将一一介绍这两部分。

1章 英雄还看今朝—Android 简介

33

图1-24 Android 运行时

核心库:包括两大部分,一部分由Java 所需调用的功能函数组成,另一部分由Android 的核心库如android.os 、https://www.wendangku.net/doc/435548076.html, 、android.media 等组成。

提示: 与传统的Java 程序不同的是,每一个Android 应用程序都有一个自有的进程,每一

个Android 应用程序都是用一个自有的Dalvik 虚拟机来执行的。

Dalvik 虚拟机:是一种基于寄存器的Java 虚拟机,其依靠转换工具dx 将Java 字节码转换为dex 格式(称为.dex

)。基于寄存器的虚拟机相对于基于栈的虚拟机的优点是:其所需资源相对较少,而且硬件实现虚拟机也会比较容易。

1.5.5 系统库

应用程序框架是贴近于应用程序的软件组件服务,而更底层则是Android 的函数库,这一部分是应用程序框架的支撑,其架构如图1-25所示。

图1-25 系统库

媒体函数库:以Packet Video 公司的OpenCORE 为基础所发展成的,使用这个函数库在播放、录制多种常见的影音格式时,非常方便。

Surface Manager :负责合成2D 与3D 绘图的软件的合成。

WebKit :这是一套网页浏览器的软件引擎。WebKit 可以为Android 内部自带的浏览器所调用,WebKit 是一个开源项目,许多浏览器也都是用WebKit 引擎所开发的,如Apple 的Safari 、Nokia s60手机的浏览器等。

SGL :提供Android 在2D 绘图方面的绘图引擎。

OpenGL ES :Android 是依据OpenGL ES1.0API 标准来实现其3D 绘图函数库的,

Android 3D 游戏开发技术详解与典型案例

34 该函数库可以用软件方式执行,也可以用硬件加速方式执行,其中在3D 软件光栅处理方面进行了高度优化。

FreeType :该库提供位图、向量字的绘图显示。

SSL (媒体框架):提供了对各种音频、视频的支持。Android 支持多种音频、视频、静态图像格式。

SQLite :这是一套轻量级的数据库引擎,支持关系数据库的事务等。

Libc :提供了一套C 库。

1.5.6 Linux 内核

采用Linux 内核(如图1-26所示)则是Android 平台开放性的基础。Android 平台中的操作系统采用了Linux 2.6版的内核,它包括了显示驱动、摄像头驱动、Flash 内存驱动、Binder (ipc )驱动、键盘驱动、wifi 驱动、Audio 驱动及电源驱动。

图1-26 Linux 内核

Linux 内核层是软件与硬件之间的桥梁,软件开发者不必关心内核的底层实现,而只需将精力全部投入到上层软件的开发中。而底层的工作都要由Google 和手机开发商来完成,如驱动的更新、新硬件驱动的编写等。

本章介绍了市场上主流的手机平台,同时也分析了未来手机平台的发展趋势及Android 平台的前景。本章还对Eclipse 集成开发环境的安装与配置进行了介绍,同时创建了我们第一个Android 应用程序——Sample1_1,关于Android 应用程序的调试及Android 应用程序的框架我们也做了简要的介绍。对于理论性的知识,读者可能暂时不能彻底理解,这些知识读者只需要先有些概念,在以后的学习中一定会遇到,结合实际例子学习之后,才能更进一步理解。

相关文档
相关文档 最新文档