版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、安徽工程大学本科安徽工程大学本科 毕业设计(论文)毕业设计(论文) 专专 业:业: 雷峰塔雷峰塔 题题 目:目: 基于基于 android 和和 wifi 技技 术的手机对战游戏术的手机对战游戏 作作 者者 姓姓 名名: 雷锋雷锋 导导师师及及职职称称 : 法法海海 导师所在单位:导师所在单位: 计算机与信息学院计算机与信息学院 2012 年年 6 月月 11 日日 基于基于 android 和和 wifi 技术的手机对战游戏技术的手机对战游戏 摘摘 要要 随着现代科技的飞跃发展,3g 智能手机为我们带来了很多便利,给我们提供了一个 高效的平台,在社会各界得到越来越广泛的应用。因此,本文围绕一
2、个“基于 android 和 wifi 技术的手机对战游戏”程序的设计和应用系统的开发课题为背景,详细介绍了在 android 平台上以 java 为语言编写游戏的过程。 此游戏结合现在已有技术,基于游戏动画设计的基本原理。设计一个基于 android 平台的射击类的游戏应用。主要包含游戏的菜单设置,游戏动画的实现,基于图形的 碰撞检测,游戏数据在手机系统之间的交互的实现。 射击类游戏的开发不仅是一个简单游戏的编写过程,更重要的是在系统分析和设计 阶段所做的工作。该程序在设计过程中严格遵循软件工程学的方法,用分阶段的生命周 期计划严格管理,并主要讲述了程序的总体设计、详细设计阶段,对程序进行需
3、求迭代,不 断修正和改进,画图利用了双缓存技术,直到形成一个完善的可行性系统.界面美观、方便 的操作与良好的视觉感应共同构成了本次的设计。 关键词:关键词:android;游戏;tcp;udp;c/s 模式 a mobile fighting game based on android and wifi abstract with the rapid development of modern science and technology, 3g smart phone has brought us a lot of convenience, provide us an efficient p
4、latform to get more and more widely in the community. therefore, this article focus on a mobile fighting game based on android and wifi and design and describe the process of writing games on the android platform in java language. this game combines existing technologies, the basic principles of gam
5、e animation design. design an application based on the android platform. contains the game menu settings, and the realization of the game animation, graphics-based collision detection,the interaction of game data between the phone system. shooting game development is not only a simple preparation pr
6、ocess of the game, more importantly, the work done in systems analysis and design phase. strictly follow the methods of software engineering in the design process, the program phased life-cycle plan, strict management, and focuses on the overall design of the program, the detailed design stage, the
7、program needs iteration, constantly revised and improved, drawing use double-buffering technology, until the formation of a feasibility beautiful interface, easy operation and good visual perception together constitute the design. keywords:android; game;tcp; udp; c/s model 目目 录录 引引 言言 .1 第一章第一章 绪论绪论
8、 .2 1.1 选题的背景.2 1.2 国内外研究现状.2 1.3 发展趋势 .3 第二章第二章 需求分析需求分析 .5 2.1 相关技术介绍.5 2.2 开发环境及工具.8 2.3 开发环境的配置.8 2.4 开发工具的配置 .9 2.5 功能需求 .11 2.6 游戏性能分析 .12 第三章第三章 概要设计概要设计 .14 3.1 android的 activity生命周期结构图.14 3.2 手机游戏框架图 .16 3.3 服务器客户端 .17 3.4 程序流程图 .18 第四章第四章 详细设计详细设计 .19 5.1 模块实现 .19 第五章第五章系统测试系统测试 .26 结论与展望结
9、论与展望 .30 致致 谢谢 .31 主要参考文献主要参考文献 .32 附录 a 外文文献及译文 .33 附录 b 主要参考文献题录 .38 插图清单插图清单 图 2- 1 软件框架图 .5 图 2- 2 wifi 模块图.8 图 2- 3 jdk 配置图.9 图 2- 4 eclipse 安装插件图.10 图 3- 1 功能需求图.12 图 4- 1 activity 生命周期图.14 图 4- 2 游戏框架图.16 图 4- 3 客户端服务器通信图.17 图 4- 4 程序流程图.18 图 5- 1 android 手机坐标轴图.19 图 5- 2 游戏设置界面.26 图 5- 3 游戏菜
10、单界面.27 图 5- 4 游戏界面.28 图 5- 5 游戏成功界面 .28 图 5- 6 联机游戏界面.29 引引 言言 随着移动设备的日益普及,使用 android 技术开发手机软件受到越来越多人的青 睐。在此背景下,本课题开发了一款 android 平台下的手机游戏空战射击。 本文首先对 android 的研究背景,系统架构以及开发环境进行介绍,然后就玩家对 游戏的需求进行一定的分析,最后运用 android 技术实现射击游戏的开发,并合理布 局游戏界面,使游戏界面更加美观和人性化,实现了游戏的基本功能,最终可以让玩 家享受游戏的乐趣。随着计算机与网络的普及,人们生活水平的提高,手机游
11、戏越来越成 为人们生活中不可或缺的一部分,在人们繁忙的工作之余,给人带去欢乐与放松。而一款 手机游戏,能和周围的同伴一起游戏,更使得游戏的可玩性大大提高,使得人们更能的 投入到游戏中去。 随着手机游戏产业的规模越来越大,开发一款成功的电脑游戏靠个人之力已非易事。 不过,随着市场上开发的游戏产品越来越丰富,各种题材的游戏越来越多,创意已成为一款 成功游戏的最重要的特点。例如目前流行的游戏, 虽然都是一些很小的休闲游戏,但是因其特有的风格,使得它们都大获好评。 我的毕业设计题目为基于”android 和 wifi 技术的手机对战游戏”。程序的编写按照 要求,分为两大模块,单机版与联机版。 第一章第
12、一章 绪论绪论 1.1 选题的背景 目前随着移动设备越来越普及以及移动设备的硬件的提升,移动设备的功能越来 越完善,移动设备的系统平台也日渐火热起来。目前国内最常见的移动开发平台有 symbian,iphone,windows phone 以及当下正在逐步兴起的 android。目前为止国内已 经有很多 android 系统的用户。截止 2010 年第二季度 android 系统的国内市场占有率 已经过 10%,在西欧以及北美智能手机市场占有率也在 20%左右。可见 android 系统 正在崛起之中。但是对于 android 系统的应用和开发在国内仍然属于起步和探索阶段。 急需要大量的相关技
13、术和人员的投入。 下面首先介绍一下 android 系统。android 是基于 linux 内核的软件平台和操作系 统,是 google 在 2007 年 11 月 5 日公布的手机系统平台,早期由 google 开发,后由 (open handset alliance)开发。它采用了软件堆层(software stack,又名以软件叠层) 的架构,主要分为三部分。低层以 linux 核心工作为基础,只提供基本功能;其他的 应用软件则由各公司自行开发,以 java 作为编写程式的一部分。 1.2 国内外研究现状 1.2.1 国内外手机系统现状 目前国外各软硬件厂商已经推出过多款手机操作系统。
14、下面简单介绍一下现主流 手机操作系统。 现阶段使用较广泛大家也相对熟悉的手机操作系统是由诺基亚公司主导推出的 symbian 操作系统。symbian 是为手机而设计的操作系统,它是一个实时性,多任务 的纯 32 位嵌入式的操作系统,具有低能耗,内存占用较少等特点。现在流行的 symbian 系统有以下四个版本,分别为 s40、s60(第二版) 、s60(第三版) 、s60(第五 版) 。s60(第五版)为触摸屏手机版本。 ios 是由苹果公司为 iphone 开发的操作系统。它主要是给 iphone、ipod touch 以及 ipad 使用。就像其基于的 mac os x 操作系统一样,它
15、也是以 darwin 为基础的。ios 的系统架构分为四个层次:核心操作系统层(the core os layer) ,核心服务层(the core services layer) ,媒体层(the media layer) ,可轻触层(the cocoa touch layer) 。系 统操作占用大概 240mb 的存储器空间 windows mobile 系列操作系统是从微软计算机的 windows 操作系统演化而来的。 windows mobile 系列操作系统功能强大,而且支持该操作系统的智能手机大多数都采 用了英特尔嵌入式处理器,主频比较高,在其它硬件配置(如内存、储存卡容量等)上也
16、 比采用其它操作系统的智能手机要高出许多,因此性能比较强劲,速度比较快。 palmos 属于 palm 公司开发,是一种 32 位的嵌入式操作系统,是一套专门为掌上 电脑编写的操作系统,是一种轻量级、比较开放的操作系统,占用的内存非常小。现 在多用 paml 公司生产的手机上。该系统允许用户在其基础上编写和修改相关软件,使 支持的应用程序更加丰富多彩。palm 系统与其他手机系统相比在其它方面也还存在一 些不足,如 palm 操作系统本身不具有录音、mp3 播放功能等,但是可以通过加入第三 方软件或硬件设备来实现。 相对国外手机系统百花齐放的局面,国内手机操作系统则处于刚起步的阶段。 目前国内
17、还没有自主研发并商品化的手机操作系统。当然近些年来国内企业和我 国政府在这方也投入了大量的人力和物力。同时也取得了一定成果。 在 2009 年 8 月,由中国移动所主导开发 ophone 平台面世。ophone 平台采用开源 的 linux 作为系统内核,借鉴并兼容 android 平台,集成灵活高效的 java 应用框架, 充分借鉴当下主流手机操作系统所具有的良好用户体验,提供了一套完整的电话解决 方案和各类移动数据业务解决方案。 1.2.2 国内外手机应用现状 随着 3g 在中国的全面启动,它所带来的巨大机遇和新生力量,大规模的网络建设 正不断深入展开。但不可否认的是我国在通信领域中相比许
18、多发达国家仍然存在着不 小的差距,就在国人还在为 edge 这种传输速度仅能达到 384kb/秒的 2.75g 过渡技术 而欣喜的时候,国外早已开始试行 hsdpa 这种 3.5g 技术,传输速度更可达到惊人的 数兆每秒,而基于其上所开发的延伸功能更是数不胜数,所以国内外手机应用也存在 的较大的差异。但国内外对手机应用的需求方向是大致相似的,主要集中在信息服务, 娱乐,学习这些方面。 目前国内外手机应用服务方向主要有基于地理位置的信息服务(location based service lbs)它是通过电信移动运营商的无线电通讯网络(如 gsm 网、cdma 网)或外 部定位方式(如 gps)获
19、取移动终端用户的位置信息(地理坐标,或大地坐标),在 gis(geographic information system,地理信息系统)平台的支持下,为用户提供相应服 务的一种增值业务。例如手机定位,导航服务。 近年来十分热门的网络社交服务(social networking services)也已进入到手机客户 端领域。例如国内有名的社交网站人人网已经针对 iphone,android,塞班等手机平台 推出了手机客户端。国外最大的社交 fackbook 也已经传出正在进行针对手机的产品的 研发。twiter,myspace 等国外知名社交类网站都已经推出手机版。国内淘宝网旗下口碑 网在今年也
20、已经推出针对多个手机平台的客户端程序。msn,qq 等即时通信类的应 用也已经在各个主流手机平台推出。 手机办公类软件在手机上也正日趋完善,在手机上编辑查看各类文档已经实现, 在 android 平台上的 quickoffice 就是这样的软件。在 google market(一个谷歌针对 android 系统用户所开发的应用商场)上已经有过万的企业应用办公套件。 手机娱乐游戏类应用,该类应用作为传统类手机应用,在各个平台上发展已近相 对完善,手机上对各种流媒体的播放也已完美的支持。各类传统 pc 游戏厂商进入手机 领域。 1.3 发展趋势 随着 3g 应用的不断开发推广,用户会越来越需要更加
21、个性化、优质化的多媒体数 据服务,用户希望能够随时、随地无缝利用 3g 网络进行办公、网上交易、游戏娱乐、 欣赏影视节目、收听和下载音乐等。根据观察,在不久的将来,移动手机终端将会在 以下若干方面具有新的发展。 首先,提供智能提醒服务,手机能够与用户实现密切配合,并监控用户的个性化 设置(保持在本地或者云端) ,当重要时间点或关键事物需要用户注意时,手机会向用 户发出“提醒”服务,服务包括日程提醒、交通状况、最佳行车路线、最佳泊位、优 惠活动、实时新闻、体育赛事、天气情况、股市行情、好友活动、亲友生日等。 其次,提供虚拟现实体验,手机可以借助传感器、周边设备了解到您的身边环境, 并根据收集到的
22、信息,智能的为您提供有用的信息,如在网络世界养的宠物,可以借 助音频设备表达叫声,借助马达和位置传感器等传递其跳、跃等行为信息;也可以在 用户购物时,提供相关的同类产品价格参考,提醒用户附近的那个卖场更物美价廉; 根据实际场景,为用户及时提供正在操控的产品的使用方法提醒。 接着,发挥物联网的优势,借助无处不在的传感器,可以感知并分享到周围世界 的海量信息,这些信息将在“云端”得到整合,帮助用户及时、准确的获得气息信息、 交通路况。另外借助物联网,用户间可以方便、快速的分享资源,协助和交互。如进 行端到端的多人游戏、照片分享、书籍分享、音乐分享等。 然后,作为经济工具,在交通或者信息不发达的情况
23、下,帮助用户找到最佳的市 场,获得有价值的帮助信息,帮助用户从事的经济活动的收益率。 最后,更加智能、安全的设备,随着智能手机的不断普及和更加智能,手机软件的更 新、升级将会变得越发简单,并会为用户提供工具或信息,让用户有能力和权力决策 那些内容可以浏览、下载或分享。在安全性上也将更加出色,能够十分有效的帮助用 户进行获取到的内容的管理,保护用户的个人隐私和基于手机的金融活动如电子钱包、 在线支付、在线贸易等。 第二章第二章 需求分析需求分析 2.1 相关技术介绍 2.1.1 android 平台介绍 android 作为一个移动设备的平台,其软件层次结构包括了一个操作系统(os) ,中间 件
24、(middleware)和应用程序(application) 。根据 android 的软件框图,其软件层次 结构自下而上分为以下几个层次: 第一、操作系统层(os) 第二、各种库(libraries)和 android 运行环境(runtime) 第三、应用程序框架(application framework) 第四、应用程序(application) 图 2- 1 软件框架图 操作系统层(os) android 使用 linux2.6 作为操作系统,linux2.6 是一种标准的技术,linux 也是一个 开放的操作系统。android 对操作系统的使用包括核心和驱动程序两部分,andro
25、id 的 linux 核心为标准的 linux2.6 内核,android 更多的是需要一些与移动设备相关的驱动 程序。主要的驱动如下所示: 显示驱动(display driver):常用基于 linux 的帧缓冲(frame buffer)驱动。 flash 内存驱动(flash memory driver) 照相机驱动(camera driver):常用基于 linux 的 v4l(video for )驱动。 音频驱动(audio driver):常用基于 alsa(advanced linux sound architecture, 高级 linux 声音体系)驱动。 wifi 驱动(
26、camera driver):基于 ieee 802.11 标准的驱动程序 键盘驱动(keyboard driver) 蓝牙驱动(bluetooth driver) binder ipc 驱动: andoid 一个特殊的驱动程序,具有单独的设备节点,提供进程 间通讯的功能。 power management(能源管理) 各种库(libraries)和 android 运行环境(runtime) 本层次对应一般嵌入式系统,相当于中间件层次。android 的本层次分成两个部分 一个是各种库,另一个是 android 运行环境。本层的内容 大多是使用 c+实现的。 在其中,各种库包括: c 库 :
27、c 语言的标准库,这也是系统中一个最为底层的库,c 库是通过 linux 的 系统调用来实现。 多媒体框架(mediaframeword):这部分内容是 android 多媒体的核心部分,基 于 packetvideo(即 pv)的 opencore,从功能上本库一共 分为两大部分,一个部分是音频、视频的回放(playback) ,另一部分是则是音视频的 纪录(recorder) 。 sgl:2d 图像引擎。 ssl:即 secure socket layer 位于 tcp/ip 协议与各种应用层协议之间,为数据通讯 提供安全支持。 opengl es 1.0 :本部分提供了对 3d 的支持。
28、 界面管理工具(surface management):本部分提供了对管理显示子系统等功能。 sqlite:一个通用的嵌入式数据库 webkit:网络浏览器的核心 freetype:位图和矢量字体的功能。 android 的各种库一般是以系统中间件的形式提供的,它们均有的一个显著特 点就是与移动设备的平台的应用密切相关。 android 运行环境主要指的虚拟机技术dalvik。dalvik 虚拟机和一般 java 虚拟机(java vm)不同,它执行的不是 java 标准的字节码(bytecode )而是 dalvik 可执行格式(.dex)中执行文件。在执行的过程中,每一个应用程序即一个进程
29、 (linux 的一个 process) 。 二者最大的区别在于 java vm 是以基于栈的虚拟机 (stack-based) ,而 dalvik 是基于寄存器的虚拟机(register-based) 。显然,后者最大 的好处在于可以根据硬件实现更大的优化,这更适合移动设备的特点。 应用程序框架(application framework) android 的应用程序框架为应用程序层的开发者提供 apis,它实际上是一个应 用程序的框架。由于上层的应用程序是以 java 构建的,因此本 层次提供的首先包含了 ui 程序中所需要的各种控件: 例如: views (视图组件)包括 lists(列
30、表), grids(栅格), text boxes(文本框), buttons(按 钮)等。甚至一个嵌入式的 web 浏览器。 一个 andoid 的应用程序可以利用应用程序框架中的以下几个部分: activity (活动) broadcast intent receiver (广播意图接收者) service (服务) content provider (内容提供者) 应用程序(application) android 的应用程序主要是用户界面(user interface)方面的,通常以 java 程序编 写,其中还可以包含各种资源文件(放置在 res 目录中)java 程序及相关资源经过
31、编 译后,将生成一个 apk 包。android 本身提供了主屏幕(home) ,联系人(contact) , 电话(phone) ,浏览器(browers)等众多的核心应用。同时应用程序的开发者还可以 使用应用程序框架层的 api 实现自己的程序。这也是 android 开源的巨大潜力的体现。 2.1.1 wifi 介绍 wi-fi 的全称是 wireless fidelity(无线保真技术),又叫 802.11b 标准。它的最大优点就 是传输速度较高,可以达到 11mbps,另外它的有效距离也很长,同时与已有的各种 802.11dsss 设备兼容。伴随着 intel 公司提出的笔记本电脑芯
32、片组“迅驰”被越来越多 的人认可,这一技术也逐渐成为了大家关注的话题。不过自 2005 年底开始,很多手机 厂商,特别是以生产智能手机为主的品牌便开始将 wifi 引入自己的产品当中。 wi-fi 技术突出的优势在于: 其一,无线电波的覆盖范围广,基于蓝牙技术的电波覆盖范围非常小,半径大约 只有 50 英尺左右约合 15 米,而 wi-fi 的半径则可达 300 英尺左右约合 100 米 ,办公室自不用说,就是在整栋大楼中也可使用。最近,由 vivato 公司推出的一款 新型交换机。据悉,该款产品能够把目前 wi-fi 无线网络 300 英尺,接近 100 米的通 信距离扩大到 4 英里约 6
33、.5 公里。 其二, wi-fi 技术传输速度非常快,可以达到 11mbps,符合个人和社会信息化的 需求。 其三,厂商进入该领域的门槛比较低。厂商只要在机场、车站、咖啡店、图书馆 等人员较密集的地方设置“热点”,并通过高速线路将因特网接入上述场所。这样,由 于“热点”所发射出的电波可以达到距接入点半径数十米至 100 米的地方,用户只要将 支持无线 lan 的笔记本电脑或 pda 拿到该区域内,即可高速接入因特网。也就是说, 厂商不用耗费资金来进行网络布线接入,从而节省了大量的成本。 android 的 wifi 模块框图: 图 2- 2 wifi 模块图 2.2 开发环境及工具 微软 xp
34、 操作系统下,游戏使用 eclipse 3.5 进行开发,jdk 采用的是 6.0,sdk 2.3 开发环境的配置 2.3.1 jdk 的配置 首先到 sun 官方网址:http:/ 下载 jdk,注意是 jdk 不是 jre,下载后如果 是解压包那就解压到某目录下,如:c:programfilesjavajdk1.6.0_20,右键点击我的电 脑-属性-高级,点击下面的环境变量,在下面的”系统变量”处选择新建在变量处输入 java_home 变量值中输入刚才的目录,比如 c:programfilesjavajdk1.6.0_20. 图 2- 3 jdk 配置图 确定后再新建一个变量名为 cl
35、asspath,变量值为: %java_home%lib/rt.jar;%java_home%lib/tools.jar,确定后找到 path 的变量,双 击或点击 编辑,在变量值前面加上%java_home%/bin。如图:图 2-4 然后开始运行 cmd,输入 java 或者 javac 看看有没有效果,如果出来一些表述的 信息,说明 jdk 已经安装成功。 2.3.2 sdk 的配置 因为我们要开发 android 应用程序,所以下载的 sdk 是 google 那里下载,地址在 http:/ 的 sdk,下载后解压到一个目录,如:d:sdkandroidandroid-sdk-wind
36、ows- 1.5_r3android-sdk-windows-1.5_r3,然后设置环境变量,在 path 中设置值为: d:sdkandroidandroid-sdk-windows-1.5_r3android-sdk-windows-1.5_r3tools,打开 dos 窗口,输入 android h,如果看到一些 andorid 关于信息,说明 sdk 已经安装成功。 2.4 开发工具的配置 当 jdk 和 sdk 都安装配置成功后,还要对 eclipse 进行配置,必须给 eclipse 添加 eclipse 插件 才行,打开 eclipse 后,点击菜单栏的 helpinstall
37、new software .然后点击 add 会出来一个 add site 的窗口,这里 name 可以自己命名,location 中输入插件的网络地址 http:/dl- install,把”android ddms”和”andoird development tools”都选中,finish 就可以了,完成后会提示重启 eclipse 来加载插件,重启后就可以了。操作如 图 2-3 图 2- 4 eclipse 安装插件图 2.5 功能需求 游戏音效:在游戏中,按照声音的功能不同,可以把它分作音乐和音效两部分; 按照声音的来源不同,又可以分为麦克风、话筒输入和音箱、耳机输出;按照声音的 作
38、用不同,还可以分为背景渲染和对事件警示两种。由此看来,针对不同的需求设计 不同的声音,使其充分满足游戏的需要,更好地为主题服务,是优秀的游戏策划应该 学习的内容之一。 声音,作为环境渲染和气氛烘托的手段,使游戏更具有强烈的时代文化气息,强 调了开发者所要表达的主题,对于游戏内涵的增强具有积极的意义。严格根据游戏的 需要,选择恰当的声音,是对游戏内涵的增强和补充,能让玩家的视和听统一结合起 来,让他们更快地融入角色,更深入地体会到游戏的乐趣。这正是开发者想要达到目 的。 在此次毕业设计中我们考虑了 2 种音效:背景音效和游戏音效。 重力感应:android 为我们提供了一系列的系统功能,重力感应
39、是其中的一个, 我们可以调用系统函数来实现对手机的重力感应,只要在 xml 文件中添加上相应的用 户许可即可。 联机作战:在游戏设计时,我们想要完成 2 部手机之间能够建立连接,可以通过 wifi 实现连接来实现游戏数据的相互传输。 功能需求图: 图 3- 1 功能需求图 2.6 游戏性能分析 任何一款游戏,其性能必然是我们不可不考虑到的问题,如果你开发出来的游戏让 玩家玩的时候,总是画面不流畅,在玩家期望得到某些效果的时候,你不能很好的提 供给他们所需要的,那么这款游戏就不能算的上是一款好游戏,所以在游戏性能必须 要优化。 优化的方法多种, 绘图优化: 1、脏矩形:每次都重绘整个背景图,其实
40、是非常浪费的,前后两帧的图其实只有 很少的一部发生了变化,因此可以只重绘变化的部分。这是一种常用的绘图优化方式, 需要注意的是,android 用了双缓冲,也就是说,使用脏矩形的时候,需要连续绘制两 次才能完成对 surface 的刷新。 2、卷屏:这是常用的一种方法,缓存整张背景图,抽象出一个可视窗口,仅显示 窗口中的内容,窗口的移动方向与 sprite 相同,与背景运动方向相反。android 游戏背 景图的分辨率一般与屏幕的相同,这种方法很少会被用到。 引擎优化: 1、流水作业化资源:简单来说,就是整合资源,不用的资源就及时释放,需要用 到的资源再加载,类似流水线生产过程。比如,游戏加载
41、过程中,当前关卡(场景、 模式等等)使用不到的音乐或者图像资源就全部释放,仅加载需要用的资源;用不到 的线程,不要让它休眠,一定要将它处理掉;如果有的资源只用得到一部分,那么就 拆解开来,仅加载需要的部分。 2、状态转移逻辑:游戏开发前一定要想清楚状态转移,冗余的状态变化将损耗框 架的整体性能,对游戏流畅性的影响以及后期修改的成本往往是远远超出预期的。不 要怕费力,一定要认真优化状态转移过程。此外,activity 之间切换、ui 线程和游戏线 程之间的切换,都是非常花费时间的,应该尽力避免。 游戏逻辑优化: 1、预处理:尽可能地预处理游戏逻辑中的运算。比如游戏中经常要用到随机数, 就应该在游
42、戏开始之前,生成足够的随机数供游戏逻辑调用,千万避免使用系统自身 的 rand()函数。这种优化方式难度比较大,但是往往是突破瓶颈的最有效手段。 2、算法优化:对需要优化的地方一定要优化,游戏算法很重要,不要简单实现功 能,要尽量用最好的算法来实现。 3、语法优化:语法对运行速度也有很大影响,比如 for 循环,不同的写法,时间 开销差别极大。 第三章第三章 概要设计概要设计 3.1 android 的 activity 生命周期结构图 图 4- 1 activity 生命周期图 oncreate():当我们的activity第一次运行的时候调用,这里我们启动所有ui组件。在整 个生命周期中只
43、调用一次; onrestart():当activity从停止状态恢复的时候调用; onstart():在oncreate()后调用或者当activity从停止态恢复的时候调用。它始终在 restart()之前被调用; onresume():在onstart()后调用或者当activity从等待态恢复的时候调用; onpause():当activity进入等待状态时调用。当系统决定杀死我们的应用程序时,它也 许是最后一道我们可以接收到的信息。这样我们就可以保存下我们想要保留的所有状 态; onstop():当activity进入停止状态的时候调用。它首先被调用进入等待状态。这意味着 当一个act
44、ivity停止了,它首先等待,这就是系统对我们的最后通知,我们可以保存下 需要的状态。防止系统也许不会调用该方法,直接杀死activity。所以onpause()总是会 在onstop()之前或activity被杀死之前调用,这样就可以让我们保存下我们想要的东西; ondestroy:在activity死亡的时候调用。这是我们想要保存信息用来下次使用的最后机 会,activity一但死亡,onpause()或者onstop()之后的方法都无法被调用了【 【11】 。 3.2 手机游戏框架图 图 4- 2 游戏框架图 3.3 服务器客户端 图 4- 3 客户端服务器通信图 这里我们采用 2 种不
45、同的网络传输方式来传送数据:tcp 用来建立连接、udp 用来传 送游戏数据。 3.4 程序流程图 图 4- 4 程序流程图 程序由一个主函数 activity,当游戏启动后被启动,然后给 activity 加上 soundview 视图,在 soundview 里面我们可以设置游戏开始后是否开启音效,设置成功后从 soundview 跳转到 menuview 视图在这里我们看到菜单选项选择进入相应的视图;在 帮助视图里我们可以看到游戏帮助和简单操作介绍、在游戏关于视图里我们可以看到 游戏背景和开发人员信息;当我们进入快速游戏视图后,进行正常游戏,成功闯关后 进入 successview 视图
46、,否则进图 failview 视图,这些就是游戏的整体流程。 第四章第四章 详细设计详细设计 5.1 模块实现 5.1.1 重力感应的实现 publicpublic voidvoid initgravity() /重力感应 得到当前x值,x值取值范围为(-10,10)/当 手机屏幕向左时x值为-10,向右时x值为10 sensormanager sensormgr = nullnull; sensormgr = (sensormanager) getsystemservice(sensor_service); sensor sensor = sensormgr.getdefaultsensor
47、(sensor.type_accelerometer); sensoreventlistener lsn = newnew sensoreventlistener() publicpublic voidvoid onsensorchanged(sensorevent e) x = e.valuessensormanager.data_x;/得到当前x值 publicpublic voidvoid onaccuracychanged(sensor sensor, intint accuracy) ; sensormgr.registerlistener(lsn,sensor,sensormana
48、ger.sensor_delay_normal); /注册listener,第三个参数是检测的精确度 重力感应的实现主要利用在对飞机的飞行位置的控制,通过手机的左右倾斜来控制飞 机的移动,但是飞机的控制会受到屏幕的限制,飞机不能飞出屏幕之外。在这里我们 需要注意的是android对坐标轴有它自己的规定,如图5-1: 图 5- 1 android 手机坐标轴图 5.1.2 音效的实现 publicpublic voidvoid initsound() /加载音乐文件 mediaplayer = newnew mediaplayer(); mpback = mediaplayer.create(t
49、histhis, r.raw.background); / 创建背景音乐 mpback.setlooping(truetrue); / 设置音乐循环播放 soundpool = newnew soundpool(4, audiomanager.stream_music, 100);/初始化声音池 soundpoolmap = newnew hashmap(); / 放置游戏音效 soundpoolmap.put(1, soundpool.load(thisthis, r.raw.explode, 1);/ 爆炸音效 soundpoolmap.put(2, soundpool.load(this
50、this, r.raw.heromissile, 1); /hero发射炮弹音效 soundpoolmap.put(3, soundpool.load(thisthis, r.raw.enemymissile, 1);/ 敌机发射炮弹音效 public void playsoundpool(int sound, int loop) ifif(!issound)/如果设置为没有打开声音,则返回,不播放音乐 returnreturn; audiomanager mgr = (audiomanager)thisthis.getsystemservice(context.audio_service);
51、 /得到音乐管理器 floatfloat streamvolumecurrent = mgr.getstreamvolume(audiomanager.stream_music); /得到当前音量 floatfloat streamvolumemax = mgr.getstreammaxvolume(audiomanager.stream_music); /得到最大音量 floatfloat volume = streamvolumecurrent / streamvolumemax; /当前音量 soundpool.play(soundpoolmap.get(sound), volume,
52、volume, 1, loop, 1f); /播放声音池里的音乐 音效是游戏中非常重要的一部分,更容易让人投入到游戏里去,也更容易让人更 喜欢这款游戏,但是我们必须知道的是: 游戏音效对游戏来说必不可少,但是如果利 用不合理,那反而会适得其反。如果一个声音出现在它不应该出现的地方,会给用户 带来负面的效果,所以我们要合理利用音效来加强用户的体验。 5.1.3 碰撞检测 publicpublic booleanboolean collision(enemy enemy) / 检测主机子弹是否击中敌机 ifif (thisthis.good = truetrue) ifif (enemy.enem
53、y_x thisthis.missile_x returnreturn falsefalse; returnreturn falsefalse; /检测主机是否击中boss publicpublic booleanboolean collision(boss boss) ifif (thisthis.good = truetrue) ifif (boss.boss_x missile_x returnreturn falsefalse; / 检测主机子弹是否击中敌机 publicpublic booleanboolean collision(plane plane) ifif (thisthi
54、s.good = falsefalse) ifif (plane.plane_x thisthis.missile_x returnreturn falsefalse; returnreturn falsefalse; 碰撞检测主要是判断我们我们在游戏过程中子弹与飞机是否相互碰撞,在本游戏 中我们主要判断规则图形是否相互碰撞,例如:矩形,圆形。 5.1.4 服务器端 serversocket ss = null; try ss = new serversocket(tcp_port); / 连接到指定端口 catch (ioexception e1) e1.printstacktrace();
55、 while (true) /用循环语句不停的监听是否有客户端加入 socket s = null; try s = ss.accept(); datainputstream dis = new datainputstream(s.getinputstream(); /输入流 ip = s.getinetaddress().gethostaddress(); int udpport = dis.readint(); dataoutputstream dos = new dataoutputstream(s.getoutputstream(); /输出流 catch (ioexception e
56、) e.printstacktrace(); finally if (s != null) try s.close();/关闭socket s = null; catch (ioexception e) e.printstacktrace(); 5.1.4 客户端 socket s =null; dataoutputstream dos = null;/输出流 try s = new socket(ip, tcp_port); dos = new dataoutputstream(s.getoutputstream(); dos.writeint(udp_port); datainputstr
57、eam dis = new datainputstream(s.getinputstream(); catch (unknownhostexception e) e.printstacktrace(); catch (ioexception e) e.printstacktrace(); finally if (s != null) try s.close(); s = null; catch (ioexception e) e.printstacktrace(); 在此我们特别提到在服务端与客户端建立连接和传输数据时,我们同时用到了 tcp 和 udp,在建立连接时我们是通过 tcp 来连接
58、的,但当要传输大量游戏数据时我 们转为 udp 传输数据。在这里就不得不提到 tcp 与 udp 的不同: tcp(transmission control protocol,传输控制协议)是基于连接的协议,也就是 说,在正式收发数据前,必须和对方建立可靠的连接。一个 tcp 连接必须要经过三次 “对话”才能建立起来,其中的过程非常复杂,我们这里只做简单、形象的介绍,你只 要做到能够理解这个过程即可。我们来看看这三次对话的简单过程:主机 a 向主机 b 发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;主机 b 向主 机 a 发送同意连接和要求同步(同步就是两台主机一个在发送,
59、一个在接收,协调工 作)的数据包:“可以,你什么时候发?”,这是第二次对话;主机 a 再发出一个数据 包确认主机 b 的要求同步:“我现在就发,你接着吧!”,这是第三次对话。三次“对话” 的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机 a 才向主机 b 正式 发送数据。 udp(user data protocol,用户数据报协议)是与 tcp 相对应的协议。它是面向非 连接的协议,它不与对方建立连接,而是直接就把数据包发送过,udp 适用于一次只 传送少量数据、对可靠性要求不高的应用环境。比如,我们经常使用“ping”命令来测试 两台主机之间 tcp/ip 通信是否正常,其实“
60、ping”命令的原理就是向对方主机发送 udp 数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来, 那么网络就是通的。例如,在默认状态下,一次“ping”操作发送 4 个数据包。大家知道, 发送的数据包数量是 4 包,收到的也是 4 包(因为对方主机收到后会发回一个确认收 到的数据包)。这充分说明了 udp 协议是面向非连接的协议,没有建立连接的过程。 正因为 udp 协议没有连接的过程,所以它的通信效果高;但也正因为如此,它的可靠 性不如 tcp 协议高。qq 就使用 udp 发消息,因此有时会出现收不到消息的情况。 在 android 进行 tcp、udp 等操作时
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 精细化管理心得体会3000字【五篇】
- 2025版高考物理二轮复习 第16讲 力学实验
- 江苏省盐城市阜宁县多校2024-2025学年九年级上学期12月月考语文试题含答案
- 2024-2025学年北师大版数学九年级上册期末培优训练(含答案)
- 新人教版数学上册四年级口算除法(公开课)
- 2017-2018学年八年级道德与法治上册同步作业课件:第一单元考试热点突破 (共17张)
- 5.1 半波整流教学课件
- 高一(纲要上)统编版 历史 第九单元《第26课 中华人民共和国成立和向社会主义的过渡》课件
- 2024年四川省达州市73九年级上学期第一次月考生物学试题
- 《乒乓球基础理论》课件
- 初级电焊工培训课件
- 井下修井作业技术课件
- 高中政治统编版选择性必修三逻辑与思维 第三单元 运用辩证思维方法 知识提纲
- 博尔赫斯简介课件
- 公司战略规划和落地方法之:五看三定工具解析课件
- 2021年山东交投矿业有限公司招聘笔试试题及答案解析
- 射频技术在疼痛治疗中应用宋文阁课件
- 化脓性脑膜炎治疗的指南
- 2023-2023学年第一学期“1530”安全警示教育记录
- 提高内镜中心内镜洗消合格率PDCA
- The Golden Ax金斧头的故事英语伊索寓言
评论
0/150
提交评论