设为首页 加入收藏

TOP

Android SDK 实例之 Snake 游戏深入解析
2014-11-24 12:07:22 来源: 作者: 【 】 浏览:0
Tags:Android SDK 实例 Snake 游戏 深入 解析

首先将工程添加到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这个简单的游戏,初步学习了如何开发游戏的界面、如何处理游戏的交互、如何保存游戏的数据等,这为我们以后开发更加复杂的游戏打好坚实的基础。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android多线程之Handler、Looper.. 下一篇Linux Slob分配器(一)--概述

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·PostgreSQL 索引 - (2025-12-25 22:20:43)
·MySQL Node.js 连接 (2025-12-25 22:20:41)
·SQL 撤销索引、表以 (2025-12-25 22:20:38)
·Linux系统简介 (2025-12-25 21:55:25)
·Linux安装MySQL过程 (2025-12-25 21:55:22)