第四章 Android游戏开发之图形界面

合集下载

基于Android平台的益智游戏的设计与现毕业论文

基于Android平台的益智游戏的设计与现毕业论文

JIUJIANGUNIVERSITY毕业论文题目基于Android平台的益智类游戏的设计与实现英文题目 DesignandImplementation of Puzzle Games BasedonAndroidPlatform院系信息科学与技术学院专业信息管理与信息系统姓名卢璐曼琳班级学号 A102208指导教师王飞鹏二○一四年五月摘要现如今,由于日益增长的市场需求、不断创新的技术、更为成熟的盈利模式,手机游戏不断发展。

作为最流行的手机操作系统,Android系统拥有者巨大的手机游戏需求者数量。

目前,以学习为主要任务的学生群体是手机游戏用户的主体,不少学生沉迷游戏而对学习丧失兴趣。

因此在Android手机平台上开发出一款寓教于乐的手机益智游戏,使学生在愉悦的游戏过程中快乐的学习是十分必要的。

本课题旨在研究如何开发出一款将经典游戏“打地鼠”与背单词结合的富有教育意义的手机益智游戏。

针对目前市场中的很多在外观和功能上有着很大优势却较为缺失趣味性的背单词软件,本应用将背单词与“打地鼠”游戏融合,并从认知心理学的记忆角度出发,优化的背单词过程,从而使得学生通过益智游戏锻炼思维敏捷性,加强单词记忆。

本文从开发Android手机游戏的背景和开发环境出发,分析了手机游戏的开发环境,介绍了手机游戏开发的关键技术,设计并开发一款“打地鼠”与记忆单词结合的学习型手机益智游戏。

关键词:安卓平台,益智游戏,打地鼠,单词记忆AbstractNow, due to the growing market demand , innovative technology , more mature profit model, mobile games is constantly evolving . As the most popular mobile operating system , Android system has a huge number of mobile game needs . Currently, those groups of students with learning as the main task is the main mobile phone game users , many students addicted to the game and lose interest in learning . Therefore, the development of amobile phonepuzzle gamebasedon theAndroidmobile platform,allowsstudentspleasureduring the gamefunto learn,it is very necessary.This paperaims tostudy how todevelop aricheducationalmobile puzzlegame which combinesthe classic game "to fight rats" and the vocabularysoftware.Forvocabularysoftwarein the currentmarket, thatmanyin appearanceand functionalityhas a greatadvantagebutmoreinterestingis missing, thisapplication integratesvocabularysoftwareand "play hamster" game, andfrom theperspective of cognitivepsychologyof memoryand optimizethe process ofmemorizing words, allows students to improveby playingpuzzle gamesthinkingagilityand enhanceword memory.This article isfrom theAndroidmobile gamedevelopmentbackground anddevelopment environment, analyzes the mobile gamedevelopment environment, introduces the keytechnologiesofmobile game development, design and developamobilelearningpuzzle game which combinesthe classic game "to fight rats" and the vocabularysoftware.Keywords:Android Platform, Puzzle Games,Whac-A-Mole,The Word Memory目录摘要IAbstractII目录III1 绪论1.1背景分析(错误!未定义书签。

Android开发指南-二维图形

Android开发指南-二维图形

Android开发指南-二维图形收藏二维图形2D GraphicsAndroid 提供一个定制的2D图形库,用来绘制图形图像和制作动画。

你将从android.graphics.drawable和android.view.animation包中找到这些通用类。

本文简单介绍如何在Android应用程序中进行画图。

我们将讨论使用Drawable对象画图的基础知识,如何使用几个Drawable子类,以及如何创建动画,一个图形的补间动画或者一系列图形的连续动画(就像电影胶卷一样)。

可绘制物Drawables一个Drawable 是一个“某些可以被绘制的物体”的一般抽象。

你将发现这个Drawable类扩展了多种具体可绘制图形类,包括BitmapDrawable, ShapeDrawable, PictureDrawable, LayerDrawable, 等等。

当然,你还可以扩展这些类来定义你自己的具有独特行为的可绘制对象。

有三种方式来定义和实例化一个Drawable:使用一个保存在你的项目资源中的图像;使用一个定义了Drawable属性的XML文件;或者使用通常的类构造函数。

下面,我们将挨个讨论前面两种方法(对于一个经验丰富的开发人员而言,使用构造函数没什么新意)。

从资源图像中创建Creating from resource images一个为你的应用程序增加图形的简单方法是通过引用项目资源中的一个图片文件。

支持的图片文件格式有PNG(推荐的),JPG(可接受的)和GIF(不鼓励的)。

这个技术将显然推荐使用在应用程序图标,logo,或者其它类似使用于游戏中的图形。

为了使用一个图片资源,只要把你的文件添加到你项目的res/drawable/目录即可。

从那里,你可以在代码或XML布局中进行引用。

任何一种方式,都是通过资源ID来引用,资源ID是不带扩展后缀的文件名(比如,my_image.png通过my_image来引用)。

精通Android游戏开发(将本地PC游戏轻松移植到Android的秘技)ch01

精通Android游戏开发(将本地PC游戏轻松移植到Android的秘技)ch01

3
1
2
这段代码定义了一个相对布局。在相对布局中,部件(widget)会相对于彼此放置(有时会 重叠) 。在这里,将有一个图像视图填充整个屏幕。这个视图会显示名为 doom.png 的文件作为背 景,这个文件存储在项目的 res/drawable 文件夹中。另外这个图像视图还会接收按键和触控事件。 在屏幕的左下方会显示一个 ID 为 btn_upleft 的图像按钮,它重叠在图像视图上。 需要一个 Android 教程吗? 与 Android 开发有关的概念实在太多,我们不太可能记住有关活动、视图和布局的所有 细节。要想快速得到这些信息,可以求助于一个便捷资源,这就是 Android 教程,下面是网 址: / 还有为 Android 开发人员提供的 “ 终极” 指南, 其中包括最新发布版本、 下载包、 SDK Quick Start、版本说明、本地开发工具和早期版本,这个指南可以在以下地址找到: /sdk/1.6_r1/index.html 在本书中(特别是讨论本地代码的章节) ,我大量使用了 Android SDK 命令工具来完成系统 管理任务。因此,你还要清楚地了解这些工具,特别是 Android 调试桥(Android Debug Bridge, ADB) 。应当知道如何完成以下工作。
$ adb push <LOCAL_FILE> <DEVICE_FILE> $ adb pull <DEVICE_FILE> <LOCAL_FILE>
说明 运行有关命令来创建SD卡文件、连接到模拟器或者上传和提取文件之前,一定要确保将 SDK_HOME/tools目录增加到系统变量PATH中。
1.1.2
提示 如果需要复习 Linux 和 shell 脚本的知识,可以查阅 Ashley J.S Mills 编写的教程: http:// /documentation/tutorials/docsystem/build/tutorials/unixscripting/unixscripting.html。

如何使用Android的硬件加速和图像渲染优化进行游戏开发(九)

如何使用Android的硬件加速和图像渲染优化进行游戏开发(九)

使用Android的硬件加速和图像渲染优化进行游戏开发Android平台的游戏开发一直以来备受开发者的关注,而如何优化游戏的性能则是一个不可忽视的问题。

本文将介绍如何利用Android 的硬件加速和图像渲染技术来优化游戏的开发过程。

一、了解Android的硬件加速机制Android平台从版本开始引入了硬件加速机制,通过使用硬件来处理应用的图形渲染,减轻了CPU的负担,提高了游戏的性能和流畅度。

开发者可以通过在文件中指定应用的硬件加速属性来启用硬件加速。

二、使用OpenGL ES进行图像渲染OpenGL ES是一种跨平台的图形库,可以实现高性能的2D和3D图形渲染。

在Android平台上,开发者可以使用OpenGL ES来进行游戏的图像渲染,并结合硬件加速来提高游戏的性能。

1. 初始化OpenGL ES环境在游戏的初始化阶段,开发者需要创建一个OpenGL ES的上下文,并设置视窗和视口大小。

同时,还需加载游戏所需的纹理和模型等资源。

2. 利用OpenGL ES进行渲染在游戏的渲染循环中,开发者需要利用OpenGL ES提供的绘制函数来绘制游戏的场景。

可以使用顶点缓冲对象和索引缓冲对象来提高绘制效率,并通过纹理映射来实现细腻的贴图效果。

3. 优化OpenGL ES的性能为了进一步提高游戏的性能,开发者可以使用一些优化技巧。

例如,尽量减少OpenGL ES状态的切换,合并绘制调用,考虑使用纹理压缩等。

三、利用硬件加速进行动画渲染在游戏中,动画的表现往往对用户体验影响很大。

Android平台提供了一套用于处理动画的API,开发者可以利用硬件加速来提高动画的渲染效果。

1. 使用属性动画属性动画是一种可以对指定属性进行平滑动画过渡的机制。

开发者可以利用属性动画来实现游戏中的角色移动、缩放、旋转等效果,并通过硬件加速来提高动画的流畅度。

2. 使用SurfaceView进行游戏渲染SurfaceView是一种特殊的View,可以在独立的线程中进行渲染。

Android手机开发教程

Android手机开发教程
2.2.1 安装JDK和配置Java开发环境 11
2.2.2 Eclipse的安装与汉化 12
2.2.3 SDK和ADT的安装和配置 14
2.3 创建第一个Android项目——HelloAndroid 16
2.3.1 创建HelloAndroid项目 16
20世纪90年代初,裘伯君、鲍岳桥等IT行业的前辈“单打独斗”就能开发出脍炙人口的应用,如今做一个项目动辄就需要数百人的大规模团队和千万级的巨额开发费用,程序员真的没有了展露个人才华和创意的机会吗?我们正站在移动技术改变人类生活方式的十字路口,而移动互联网正是这一切的关键。Android以全新的开放平台和全球化的市场,为小团队提供了一个充分展现自己的舞台。本书为所有Android开发者提供了绝佳的参考,不可不读!
在安装了Android开发环境之后,可以直接将Android项目导入到Eclipse中,步骤如下:
首先,启动Eclipse,选择“File”→“Import...”菜单,展开“General”项,选择“Existing Projects into Workspace”导入项目到工作区,如图3所示。
—Android中文用户组
随着3G技术的成熟和智能手机的不断普及,移动应用的需求与日俱增,移动应用开发成为当下最热门的技术之一。在Google和Android手机联盟的共同推动下,Android在众多移动应用开发平台中脱颖而出。本书的出版对于广大Android应用开发者来说不啻是一种福音,它将为Android开发者社区注入强大的活力!
—谷奥(/)
这是一本参考手册,内容的完整性和系统性几乎无可挑剔,可作为广大Android开发者的案头必备书;这是一部权威指南,基础知识部分翔实而丰富,高级知识部分深入且饱含最佳实践,能从本质上提升开发者对Android的理解和开发水平。尤为值得一提的是,Android 2.0中新增了大量激动人心的新特性,不仅支持多点触摸设备、软键盘,而且还支持多账户在线管理、蓝牙……作为国内第一本基于Android 2.0的著作,本书可谓极具前瞻性,第一时间将这些新特性完美地呈现给了广大读者。

android游戏开发教程

android游戏开发教程

Android游戏开发教程前言随着移动设备的普及,Android平台上的游戏市场蓬勃发展。

越来越多的人开始对Android游戏开发产生兴趣。

本文将介绍一些基本的Android游戏开发知识,帮助初学者快速入门。

1. Android游戏开发简介Android游戏开发是指在Android平台上开发游戏应用程序。

Android提供了强大的开发工具和丰富的API,使得游戏开发变得更加简单和高效。

2. 开发环境搭建要开始Android游戏开发,您需要搭建适当的开发环境。

以下是搭建开发环境的步骤:•安装Java开发工具包(JDK)•安装Android开发工具包(Android SDK)•配置Android开发环境•使用Android Studio进行开发3. 游戏开发基础知识在开始Android游戏开发之前,了解一些基本的游戏开发知识将会非常有帮助。

以下是一些重要的概念:•游戏循环:游戏循环是指游戏的主要执行逻辑。

它通常包含三个主要阶段:输入处理、更新游戏状态和渲染。

•游戏物体:游戏物体是游戏中的所有实体,如角色、地图、道具等。

它们具有属性和行为,可以根据游戏逻辑进行交互。

•物理引擎:物理引擎用于模拟现实世界的物理规则,如重力、碰撞等。

它可以使游戏更加真实和流畅。

•图形和动画:游戏中的图形和动画是吸引玩家的重要因素。

Android提供了丰富的图形和动画库,可以帮助您创建精美的游戏界面。

4. Android游戏开发框架在Android游戏开发中,使用游戏开发框架可以加快开发速度并提高代码质量。

以下是一些常用的Android游戏开发框架:•Unity:Unity是一款强大的跨平台游戏开发引擎,支持Android平台。

它提供了丰富的功能和工具,可以帮助开发者创建各种类型的游戏。

•LibGDX:LibGDX是一款轻量级的游戏开发框架,它基于Java语言,支持Android平台。

它提供了简单易用的API和丰富的扩展功能,适合初学者和中级开发者使用。

移动应用界面设计开发标准手册

移动应用界面设计开发标准手册

移动应用界面设计开发标准手册第1章界面设计基础 (4)1.1 设计原则与规范 (4)1.2 设计工具与技术 (4)1.3 用户体验与交互设计 (4)第2章色彩与视觉元素 (4)2.1 色彩搭配与运用 (4)2.2 图标与按钮设计 (4)2.3 图片与插画应用 (4)第3章字体与排版 (4)3.1 字体选择与运用 (4)3.2 标题与正文排版 (4)3.3 文本输入与显示 (4)第4章布局与导航 (4)4.1 布局原则与类型 (5)4.2 栅格系统与间距 (5)4.3 导航模式与设计 (5)第5章交互与动画 (5)5.1 交互设计原则 (5)5.2 触控操作与反馈 (5)5.3 动画效果与过渡 (5)第6章列表与卡片 (5)6.1 列表展示与排序 (5)6.2 卡片式设计与应用 (5)6.3 滑动操作与筛选 (5)第7章表单与输入 (5)7.1 表单设计原则 (5)7.2 输入框与选择器 (5)7.3 错误提示与校验 (5)第8章消息提示与通知 (5)8.1 消息提示设计 (5)8.2 通知栏与推送 (5)8.3 弹窗与模态窗口 (5)第9章用户引导与教育 (5)9.1 新功能引导设计 (5)9.2 操作教程与提示 (5)9.3 帮助与反馈 (5)第10章跨平台与响应式设计 (5)10.1 跨平台设计原则 (5)10.2 响应式布局与适配 (5)10.3 平台特定设计与优化 (5)第11章功能优化与测试 (5)11.2 加载与刷新机制 (6)11.3 界面测试与评估 (6)第12章设计规范与交付 (6)12.1 设计规范与组件库 (6)12.2 设计交付物与协作 (6)12.3 设计迭代与优化 (6)第1章界面设计基础 (6)1.1 设计原则与规范 (6)1.2 设计工具与技术 (6)1.3 用户体验与交互设计 (7)第2章色彩与视觉元素 (7)2.1 色彩搭配与运用 (7)2.1.1 整体色调协调统一 (7)2.1.2 重点色运用 (7)2.1.3 色彩平衡 (7)2.1.4 调和对立色 (8)2.2 图标与按钮设计 (8)2.2.1 形状与线条 (8)2.2.2 颜色搭配 (8)2.2.3 尺寸与间距 (8)2.3 图片与插画应用 (8)2.3.1 选择合适的图片 (8)2.3.2 个性化插画 (8)2.3.3 合理布局 (9)第3章字体与排版 (9)3.1 字体选择与运用 (9)3.1.1 字体分类 (9)3.1.2 字体选择原则 (9)3.1.3 字体运用技巧 (9)3.2 标题与正文排版 (9)3.2.1 标题排版 (10)3.2.2 正文排版 (10)3.3 文本输入与显示 (10)第4章布局与导航 (10)4.1 布局原则与类型 (10)4.2 栅格系统与间距 (11)4.3 导航模式与设计 (11)第5章交互与动画 (12)5.1 交互设计原则 (12)5.2 触控操作与反馈 (12)5.3 动画效果与过渡 (13)第6章列表与卡片 (13)6.1 列表展示与排序 (13)6.1.2 列表的排序 (13)6.2 卡片式设计与应用 (14)6.2.1 卡片式设计的基本概念 (14)6.2.2 卡片式设计的应用 (14)6.3 滑动操作与筛选 (14)6.3.1 滑动操作 (14)6.3.2 筛选功能 (15)第7章表单与输入 (15)7.1 表单设计原则 (15)7.2 输入框与选择器 (15)7.3 错误提示与校验 (16)第8章消息提示与通知 (16)8.1 消息提示设计 (16)8.1.1 设计原则 (16)8.1.2 设计方法 (17)8.2 通知栏与推送 (17)8.2.1 通知栏设计 (17)8.2.2 推送设计 (17)8.3 弹窗与模态窗口 (17)8.3.1 弹窗设计 (17)8.3.2 模态窗口设计 (17)第9章用户引导与教育 (18)9.1 新功能引导设计 (18)9.1.1 明确目标用户群体 (18)9.1.2 简洁明了的引导界面 (18)9.1.3 逐步引导 (18)9.1.4 互动式引导 (18)9.1.5 个性化引导 (18)9.2 操作教程与提示 (18)9.2.1 结构清晰的教程内容 (18)9.2.2 图文并茂的教程形式 (19)9.2.3 关键步骤的提示 (19)9.2.4 适时出现 (19)9.3 帮助与反馈 (19)9.3.1 帮助中心 (19)9.3.2 在线客服 (19)9.3.3 用户反馈渠道 (19)9.3.4 优化更新提示 (19)第10章跨平台与响应式设计 (19)10.1 跨平台设计原则 (19)10.2 响应式布局与适配 (20)10.3 平台特定设计与优化 (20)第11章功能优化与测试 (21)11.1.1 代码优化 (21)11.1.2 资源管理 (21)11.1.3 网络优化 (21)11.2 加载与刷新机制 (21)11.2.1 页面加载优化 (21)11.2.2 数据刷新机制 (22)11.3 界面测试与评估 (22)11.3.1 界面功能测试 (22)11.3.2 界面评估 (22)第12章设计规范与交付 (22)12.1 设计规范与组件库 (22)12.1.1 设计规范 (22)12.1.2 组件库 (23)12.2 设计交付物与协作 (23)12.2.1 设计交付物 (23)12.2.2 协作 (23)12.3 设计迭代与优化 (23)12.3.1 设计评审 (23)12.3.2 用户反馈 (24)12.3.3 数据分析 (24)12.3.4 设计工具与方法 (24)第1章界面设计基础1.1 设计原则与规范1.2 设计工具与技术1.3 用户体验与交互设计第2章色彩与视觉元素2.1 色彩搭配与运用2.2 图标与按钮设计2.3 图片与插画应用第3章字体与排版3.1 字体选择与运用3.2 标题与正文排版3.3 文本输入与显示第4章布局与导航4.1 布局原则与类型4.2 栅格系统与间距4.3 导航模式与设计第5章交互与动画5.1 交互设计原则5.2 触控操作与反馈5.3 动画效果与过渡第6章列表与卡片6.1 列表展示与排序6.2 卡片式设计与应用6.3 滑动操作与筛选第7章表单与输入7.1 表单设计原则7.2 输入框与选择器7.3 错误提示与校验第8章消息提示与通知8.1 消息提示设计8.2 通知栏与推送8.3 弹窗与模态窗口第9章用户引导与教育9.1 新功能引导设计9.2 操作教程与提示9.3 帮助与反馈第10章跨平台与响应式设计10.1 跨平台设计原则10.2 响应式布局与适配10.3 平台特定设计与优化第11章功能优化与测试11.1 功能优化策略11.2 加载与刷新机制11.3 界面测试与评估第12章设计规范与交付12.1 设计规范与组件库12.2 设计交付物与协作12.3 设计迭代与优化第1章界面设计基础1.1 设计原则与规范界面设计是软件开发中的环节,它直接关系到用户对产品的第一印象及长期使用体验。

基于Android的手机应用开发—连连看游戏的开发与实现

基于Android的手机应用开发—连连看游戏的开发与实现

本科毕业设计(论文)题目: 基于Android的手机应用开发——连连看游戏的开发与实现姓名学院信息与通信工程学院专业自动化班级学号班内序号指导教师2010年6月基于Android的移动智能应用开发—连连看游戏的开发与实现摘要在地铁、机场和车站,越来越多的人低头玩着手机游戏,伴随着不断变化的表情,或皱眉或微笑。

手机已经成为人们生活的一部分,人们也渐渐习惯于将手机作为新的娱乐工具。

现在3G手机时代又即将开启。

2007年末,Android平台犹如一颗Google公司丢的重磅炸弹,在移动终端领域掀起了轩然大波。

Android凭借其开放性和灵活性渐渐赶超原有系统平台,成为近年来最热门的移动终端平台之一,在Android平台上进行游戏的开发,成为一个有趣并富有潜力的领域。

此次毕业设计的目的就是了解和掌握Android操作系统,并在Android平台上做简单的移动智能应用开发。

平台采用Java语言在eclipse上实现并测试。

该文章总体上可以分成两大部分,第一部分首先对Android平台的搭建作了简要的说明,然后介绍Android平台上开发的小游戏“连连看”的过程及方法;该游戏除了能实现传统“连连看”游戏的基本功能外,还有一些附加功能如帮助、背景音乐等。

第二部分介绍在Android平台上开发的一个程序,这个程序可以实现对视频的录制,并将录好的视频存储在手机的SD卡上这样一种功能。

其中第二部分可以被借鉴,进一步用于DVC编解码的实现。

也列举出了在调试程序时遇到的一些问题和解决方法。

将这两个程序放到真机上测试也收到了良好的效果。

关键词Android SD卡DVC 3GAndroid-based Mobile Intelligent Application Development –the development and implementation of the gameLianliankanABSTRACTIn the subway, airport and station, more and more people playing mobile games bow, accompanied by changing expression, or frown or smile.Phones have become a part of life, and people became accustomed to hand machine as a new entertainment tool.Now they are soon to open 3G cell phone era.The end of 2007, Android platform broke out like a blockbuster from Google Inc. in the field of mobile terminal has sparked an outcry.Android by virtue of its openness and flexibility gradually catch up with the original platform, become the most popular mobile terminal platforms. The game development in the Android platform has become an interesting and promising area.The graduation project is aimed to understand and master the Android operating system, and to do simple Android platform for mobile intelligent application development.The platform uses the java language, and is implemented and tested by eclipse.The article in general can be divided into two parts, the first part of the Android platform, a brief description of the structures, and then describes the development of Android platform game "Lianliankan" process and methods; the game in addition to achieve the traditional "Lianliankan" the basic function of the game, there are some additional features such as help, background music. The second part describes the development of Android platform, a program, this program can be recorded on video and video-recorded stored in the SD card such a function. The second part of which can be reference, and further for DVC codec implementation.Also cited a number of problems and solutions encountered in the debugger These two procedures into a real machine on the test also received good results.KEY WORDS Android sdcard DVC 3G目录第一章开发背景介绍----------------------------------------------- 21.1 手机应用市场描述---------------------------------------- 21.2 移动互联网进展------------------------------------------ 21.3 智能手机应用平台---------------------------------------- 41.4 Android平台介绍---------------------------------------- 61.5 Android开源性能展望------------------------------------ 9第二章连连看游戏开发过程介绍------------------------------------ 102.1 连连看游戏背景介绍------------------------------------- 102.2 连连看游戏开发平台介绍--------------------------------- 102.3 核心算法说明------------------------------------------- 122.3.1 数字化和布局-------------------------------------- 122.3.2 判断两个点的连通性-------------------------------- 132.3.3 布局无解的判断------------------------------------ 142.4 连连看游戏UI部分介绍---------------------------------- 142.5 代码的实现与分析--------------------------------------- 23第三章获取视频文件的程序设计------------------------------------ 293.1 Android多媒体开发背景介绍----------------------------- 293.2 MediaRecorder类的介绍--------------------------------- 293.3 设计思路概述------------------------------------------- 303.4 程序UI部分介绍---------------------------------------- 313.5 代码的实现与分析--------------------------------------- 33第四章遇到的问题及解决方法 ------------------------------------ 34第五章程序开发的心得体会 -------------------------------------- 40参考文献------------------------------------------------------- 41致谢--------------------------------------------------------- 42附录 1 ------------------------------------------------------- 43附录 2--------------------------------------------------------- 64第一章开发背景介绍1.1手机应用市场描述最近几年,国内手机市场发展势头迅猛,以Nokia、摩托、三星、等较大的手机制造商为主,又相继出现了数不胜数的手机生产厂家,其规模也在不断扩大,彩屏手机、彩信手机、智能手机纷纷上市,高像素照相手机、游戏手机、音乐手机开始纷纷登台亮相,现在又即将开启3G手机的时代,使视频通话成为了现实。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第四章 Android游戏开发之图形界面4.1 图片图片是游戏的必备元素之一。

4.1.1 drawable对象游戏所使用到的图片资源,我们都把它放置到res文件夹中的drawable中,当增加了drawable对象后,Android SDK会为该图片资源在R清单文件中创建一个索引项,该索引的名字为R.drawable.fileName。

生成了该资源的索引后,在XML资源文件中就可以通过@drawable/fileName来访问该图片资源,也可以在代码中R.drawable.fileName来访问该drawable对象。

而R.drawable.fileName只是一个int类型的常量,它只是代表了drawable对象的ID,程序代码当中需要获取到实际的drawable对象,需要调用Resource的getDrawable(int id)方法来获取。

4.1.2 BitmapBitmap即位图,Bitmap类中欧那个提供了一些静态方法来创建新的Bitmap对象,如下是常用的方法。

对象,如:BitmapDrawable drawable = new BitmapDrawable(bitmap);获取BitmapDrawable所包装的Bitmap对象可以调用该类的getBitmap()方法,如Bitmap bitmap = drawable.getBitmap();。

BitmapFactory是一个Bitamap的工具类,它共提供了多种方法以便于从不同的数据源来解析和创建Bitmap对象,如下。

drawable目录中,而程序代码中通过该图片对应的资源ID来获取封装该图片的drawable对象即可。

但手机系统的内存是有限的,如果不停的创建Bitmap对象,就会导致内存不够用的情况,所以Bitmap有各两个非常重要的方法来判断图片资源的是否回收和强制Bitmap进行回收。

一下都是一些Bitmap常用到的方法。

4.2 绘图了解了图片后,游戏当中最重要的一部分操作就是图片的绘制了。

本节主要来介绍Android当中的绘图。

Android当中的绘图组件都是继承自View组件,并且重写onDraw(Canvas canvas)方法即可。

关于View前面的章节当中已经讲解过了,本节主要来看看涉及到绘图onDraw方法当中的Canvas对象,以及相关的Paint类的使用。

4.2.1 Canvas类Canvas可以理解为一张画布,而该画布是属于它所在的View 对象的。

Canvas当中提供了一系列的方法用于绘制,如下。

4.2.2 Paint类从Canvas的绘制方法可以看到,所有的绘制方法都需要一个Paint参数,Paint是Canvas上的画笔,Paint主要用于设置绘制的一些属性,比如画笔的颜色,画笔的笔触粗细,填充的风格等。

如下是Paint类中的常用方法。

4.2.3 绘制实例上面介绍了Android中的各种绘制,本节中我们通过实例来具体了解绘制过程。

1.创建一个名为TestCanvas的项目。

2.将要绘制的图片资源拷贝到res当中drawable路径中。

3.打开string.xml文件设置要绘制的字符串,如下。

4.新建一个类继承View,实现onDraw方法如下。

5.在Activity类中显示MyView对象,如下。

6.最后运行显示结果如下图。

4.3 View与 SurfaceView前面的介绍中绘图主要使用的是View组件,但实际的游戏开发中,我们一般使用的都是SurfaceView,使用SurfaceView的原因是因为View 当中没有双缓冲的机制,当程序需要更新View上的图像时,程序必须重绘View上显示的整张图片,所以通过自定义View来实现绘图尤其是游戏中的绘图效率并不高,而使用Android当中提供的SurfaceView来进行游戏的绘制比View更加出色,所以一般推荐使用SurfaceView,SurfaceView 是从View基类中派生出来的显示类,所以View当中所有的SurfaceView 当中也有。

SurfaceView可以控制表面的格式,比如大小,显示在屏幕中的位置,最关键是的提供了SurfaceHolder类,使用getHolder方法获取,相关的有Canvas lockCanvas()、Canvas lockCanvas(Rect dirty) 、void removeCallback(SurfaceHolder.Callback callback)、void unlockCanvasAndPost(Canvas canvas) 控制图形以及绘制,而在SurfaceHolder.Callback 接口回调中可以通过重写下面方法实现。

使用的SurfaceView的时候,一般情况下要对其进行创建,销毁,改变时的情况进行监视,这就要用到 SurfaceHolder.Callback。

class xView extends SurfaceView implements SurfaceHolder.Callback {//在surface的大小发生改变时激发public void surfaceChanged(SurfaceHolder holder,intformat,int width,int height){}//在创建时激发,一般在这里调用画图的线程。

public void surfaceCreated(SurfaceHolder holder){}//销毁时激发,一般在这里将画图的线程停止、释放。

public void surfaceDestroyed(SurfaceHolder holder){}}对于Surface相关的,Android底层还提供了GPU加速功能,所以一般实时性很强的应用中主要使用SurfaceView而不是直接从View构建,同时后来做android 3d OpenGL中的GLSurfaceView也是从该类实现。

SurfaceView和View最本质的区别在于,surfaceView是在一个新起的单独线程中可以重新绘制画面而View必须在UI的主线程中更新画面。

那么在UI的主线程中更新画面可能会引发问题,比如你更新画面的时间过长,那么你的主UI线程会被你正在画的函数阻塞。

那么将无法响应按键,触屏等消息。

当使用surfaceView ,由于是在新的线程中更新画面所以不会阻塞你的UI主线程。

但这也带来了另外一个问题,就是事件同步。

比如你触屏了一下,你需要surfaceView中thread处理,一般就需要有一个event queue的设计来保存touch event,这会稍稍复杂一点,因为涉及到线程同步。

所以基于以上,根据游戏特点,一般分成两类。

1 .被动更新画面的。

比如棋类,这种用view就好了。

因为画面的更新是依赖于 onTouch 来更新,可以直接使用 invalidate。

因为这种情况下,这一次Touch和下一次的Touch需要的时间比较长些,不会产生影响。

2.主动更新。

比如一个人在一直跑动。

这就需要一个单独的thread 不停的重绘人的状态,避免阻塞main UI thread。

所以显然view不合适,需要surfaceView来控制。

Android中的SurfaceView类就是双缓冲机制。

因此,开发游戏时尽量使用SurfaceView而不要使用View,这样的话效率较高,而且SurfaceView 的功能也更加完善。

考虑以上几点,所以一般选用 SurfaceView 来进行游戏开发。

4.3.1 View以及双缓冲实现View中常用的方法如下。

View当中如何实现双缓冲。

1.创建一个名为TestView的项目。

2.创建一个MyView的类继承View类,内容如下。

3.在Activity中设置显示MyView对象,如下。

4.运行如下图。

从上述的例子代码中可以看出,双缓冲即先在内存中创建一幅图片,所有的绘制是绘制在该内存图片当中,在屏幕上的时候只负责显示内存当中图片,这样绘制显然优于从外部设备直接绘制到屏幕上的图片,同时可以减少屏幕闪烁等问题。

接下来看一个View的应用实例,实现游戏的菜单。

1.创建一个名为TestMenu的项目。

2.将要使用的图片资源导入到res的drawable当中。

3.实现一个MyView的类继承View,并实现代码如下。

4.在Activity中,显示MyView对象。

5.运行效果如下图。

该案例当中用触屏时间来判断按下的是哪个菜单选项。

4.3.2 SurfaceView中的绘制SurfaceView是View的子类,但SurfaceView自带双缓冲,它一般与SurfaceHolder结合使用,SurfaceHolder用于向与之关联的SurfaceView上绘图,SurfaceView的getHolder()函数可以获取SurfaceHolder对象,SurfaceView就在SurfaceHolder对象内。

虽然SurfaceView保存了当前窗口的像素数据,但是在使用过程中是不直接和SurfaceView打交道的,由SurfaceHolder的Canvas lockCanvas()或则Canvas lockCanvas()函数来获取Canvas对象,通过在Canvas上绘制内容来修改SurfaceView中的数据。

如果SurfaceView不可编辑或则尚未创建调用该函数会返回null,在unlockCanvas() 和 lockCanvas()中SurfaceView的内容是不缓存的,所以需要完全重绘SurfaceView的内容,为了提高效率只重绘变化的部分则可以调用lockCanvas(Rect rect)函数来指定一个rect 区域,这样该区域外的内容会缓存起来。

在调用lockCanvas函数获取Canvas后,SurfaceView会获取SurfaceView的一个同步锁直到调用unlockCanvasAndPost(Canvas canvas)函数才释放该锁,这里的同步机制保证在SurfaceView绘制过程中不会被改变。

SurfaceHolder提供的获取Canvas对象的方法。

但第一个方法之将Rect所指定的区域提取出来进行更新,这种方式可以提高画面的更新速度,而最后一个方法,当调用之后该方法前的绘制内容还存储于缓冲之中,下一次lockCanvas的时候,该方法锁定的区域可能会遮挡住前面的内容,所以如果不想被遮挡,可以选择重新lockCanvas一次,而lock的区域为0,再释放,保证下次lock 的时候被遮挡。

实际的游戏开发当中,我们会为SurfaceHolder添加一个一次创建后会立即调用该函数。

相关文档
最新文档