Snake是Android SDK例子程序中的一个小游戏,工程源代码:android-sdk-windows-1.5_r2\platforms\android-1.1\samples\Snake。这个小游戏在手机、游戏机、电脑中都出现过,游戏具体的玩法想必大家都知道,我主要是从Android开发应用程序的角度来分析这个游戏的框架、结构等。

首先将工程添加到Eclipes中,看源代码,分析类之间的关系,如下:

整个工程主体也就3个类:Snake,SnakeView,TitleView。Activity,View,Handler是Android SDK提供的基础类,Coordinate,RefreshHandler是2个辅助类,也是SnakeView类中的内部类。其中,Coordinate就相当于是一个点的坐标(x,y),RefreshHandler的主要功能是将RefreshHandler对象绑定某个线程并与给它发送消息。Snake类是这个游戏的入口点,TitleView类负责游戏的绘画,SnakeView类负责对游戏控制操作的处理。

类的结构在上图中已经清晰说明,主要接口解析如下:

TitleView  extends  View

继承的接口

onSizeChanged()

在视图大小改变的时候调用,比如说手机由垂直旋转为水平

onDraw()

在视图需要重画的时候调用,比如说使用invalidate刷新界面上的某个矩形区域

Snake  extends  TitleView

继承的接口

onKeyDown()

监听用户键盘操作,并处理这些操作

新增加的接口

restoreState()/saveState()

恢复/保存游戏的数据

update()

重新计算当前游戏的数据

然后具体分析整个游戏的框架,任何一个游戏都需要有个引擎来推动游戏的运行,最简化的游戏引擎就是:在一个线程中While循环,检测用户操作,对用户的操作作出反应,更新游戏的界面,直到用户退出游戏。

先解析下RefreshHandler这个辅助类的作用,RefreshHandler继承至Handler,其主要作用就是把RefreshHandler与当前线程进行绑定,然后就可以直接给线程发送消息并处理消息,有一点需要强调的是:Handle对消息的处理都是异步。RefreshHandler在Handler的基础上增加sleep()接口,其主要作用就是每隔一个时间段后给当前线程发送一个消息;而handleMessage()则就是在接受消息后,让界面对当前的游戏状态作出处理,运行机制如下:

实际上以上就相当于一个定时器,在特定的时刻发送消息,根据消息处理相应的事件。Update()与Sleep()这2个函数间接的相互调用就构成了一个循环。

需要注意的是:mRedrawHandle绑定的是Avtivity所在的线程,也就是程序的主线程;另外由于sleep()是个异步函数,所以Update()与Sleep()之间的相互调用才没有构成死循环。

最后分析下游戏数据的保存机制,如下:

以上主要考虑了Activity的生命周期:如果用户在游戏期间离开游戏界面,游戏暂停;如果由于内存比较紧张,Android关闭游戏释放内存,那么当用户返回游戏界面的时候恢复到上次离开时的界面。

Snake源代码的内部细节,就不额外说明,在了解了框架后,再阅读代码就轻松多了。

总结说明

通过学习Snake这个简单的游戏,初步学习了如何开发游戏的界面、如何处理游戏的交互、如何保存游戏的数据等,这为我们以后开发更加复杂的游戏打好坚实的基础。

参考网址:http://www.moandroid.com/?p=474

Android SDK实例之Snake游戏深入解析(一)相关推荐

  1. OpenCV android sdk配置OpenCV android NDK开发实例

    OpenCV android sdk配置OpenCV android NDK开发实例 [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/det ...

  2. 【Android游戏开发十一】手把手让你爱上Android sdk自带“9妹”

    本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/android-game/321.html 前 ...

  3. Unity3d Android SDK接入解析(四)通用的Android SDK接入中间件

    一.前言 接入Android SDK正式告一段落,在这段时间里面,依次接入了华为.应用宝.小米.360等等大大小小十来个SDK,也算对Unity接入渠道SDK有了较为全面的理解,对各个渠道的坑也算深有 ...

  4. Unity3d Android SDK接入解析(三)接入Android Library的理解(爱贝云支付为例)

    一.前言 写这个主题的原因,出于刚入门u3d,需要接入爱贝云支付的内容,苦于爱贝支付是一个Android的Library库,看到网上漫天遍野都是Android接入的帖子,但却没有我想要的关于Libra ...

  5. android+sdk九宫格游戏,GitHub - mikegame/Android-SDKDemo: 米壳游戏Android SDKDemo

    米壳Android SDK客户端说明文档 演示项目 查看并运行 Android-SDKDemo/MKSDKDemo 使用 将 libMKSDK-release.aar 添加(拖放)到你的工程目录下li ...

  6. Appium 移动端自动化 - Android SDK的安装与配置,使用安卓SDK连接手机实例演示

    Android SDK 的安装与配置演示 第一章:Android SDK 的安装 ① 下载 ② 安装过程 ③ 配置 第二章:连接手机 USB 调试 ① 一加8手机连接演示 第一章:Android SD ...

  7. android 360游戏sdk,360ssp sdk接入说明 360移送媒体平台Android SDK 接入说明

    360ssp sdk接入说明 360移送媒体平台Android SDK 接入说明 360ssp sdk接入说明 360移送媒体平台Android SDK 接入说明: Android SDK SDK版本 ...

  8. Android SDK解析

    第一次接触到AndroidSDK 是在安装Android Studio的时候,需要下载SDK,下载完之后会有一个SDK的目录文件夹,除此之外在我印象中就没有主动去使用过SDK了. SDK全称Softw ...

  9. android sdk工具之MonkeyRunner (实例)_小兵兵同学_新浪博客

    android sdk工具之MonkeyRunner (实例)_小兵兵同学_新浪博客

最新文章

  1. UC伯克利教授Stuart Russell人工智能基础概念与34个误区
  2. linux安装深度软件商店,Deepin系统中的深度商店V5.1发布,基于Debian的Linux可安装...
  3. 2pc_two phase commit详情
  4. Linux第四章自测习题——Linux系列学习笔记
  5. 编程行业里面的新行话
  6. jhipster_jHipster入门,第1部分
  7. django 传递中文_如何在Django中建立消息传递状态
  8. 【LeetCode笔记】148. 排序链表(Java、归并排序、快慢指针、双重递归)
  9. hiho一下第128周 后缀自动机二·重复旋律5
  10. DataV数据可视化功能特性
  11. jquery.lazyload 插件实现图片延迟加载
  12. Q91:真实地模拟透明材质(Realistic Transparency)(3)——A Glass of Water
  13. 人脸对齐(四)--CLM算法及概率图模型改进
  14. ElasticHD Windows环境下安装(转载)
  15. java stream list转map
  16. “姓氏文化展”在国图开展 免费对读者开放
  17. Python字符串前缀u、r、b、f含义
  18. java定义两个动物抽象类 程序_java抽象类和接口详解
  19. Mac邮件客户端怎么添加QQ邮箱
  20. Android自定义九宫格图片展示,类似微信朋友圈

热门文章

  1. python移植到arm_python移植到arm平台
  2. TypeScript 乱糟笔记
  3. Arrays.toList工具类
  4. 为刚開始学习的人答效率的问题
  5. (Excel)常用函数公式及操作技巧之四:文本与页面设置(一)
  6. Dataset/Datatable/Datarow转Json的一种方法
  7. php 源文件加密工具PHP Screw
  8. CVPR 2021 出自港中文,对抗变换提高对抗样本的可迁移性
  9. 【堪萨斯州立大学】电子和计算机工程系智能能源研究室、硬件安全实验室招募博士,提供多个全额奖学金机会...
  10. 20种小技巧,玩转Google Colab