欢迎来到天天文库
浏览记录
ID:39888694
大小:241.49 KB
页数:17页
时间:2019-07-14
《Android游戏开发框架》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、Android游戏开发:游戏框架的搭建(1) 通常情况下,游戏开发的基本框架中,一般包括以下模块: 窗口管理(Windowmanagement):该模块负责在Android平台上创建、运行、暂停、恢复游戏界面等功能。 输入模块(Input):该模块和视窗管理模块是密切相关的,用来监测追踪用户的输入(比如触摸事件、按键事件、加速计事件等)。 文件输入输出(FileI/O):此模块用来读取assets文件下图片、音频等资源。 图像模块(Graphics):在实际游戏开发中,这个模块或许是最复杂的部分。它负责加载
2、图片并把它们绘制到屏幕上。 音频模块(Audio):这个模块负责在不同的游戏界面加载音各类频。 网络(networking):如果游戏提供多人游戏联网功能,此模块就是必须的。 游戏框架(Gameframework):该模块把以上各种模块整合起来,提供一个易用的框架,来轻松地实现我们的游戏。 下面对每一个模块进行详细的描述。1.窗口管理 我们可以把游戏的窗口想象成一个可以在它上面绘制内容的画布。窗口管理模块负责定制窗口、添加各种UI组建、接受各类用户的输入事件。这些UI组件或许可以通过GPU等硬件加速(比如使
3、用了OpenGLES)。 该模设计时不是提供接口,而是和游戏框架整合在一起,之后会有相关的代码贴出。我们需要记住的是应用程序状态和窗口事件是该模块必须处理的事情: Create:当窗口被创建时被调用的方法。 Pause:当应用程序由于默写原因暂停时调用的方法。 Resume:当应用程序恢复到前台时调用的方法。2.输入模块 大部分操作系统中,输入事件(比如触屏事件、按键事件)是通过当前的窗口调度(dispatched)的,窗口再进一步把这些事件派发给当前选中的组件。因此我们只需要关注组件的事件即可
4、。操作系统提供的UIAPIs提供了事件分发机制,我们可以很容易地注册和监听事件,这也是输入模块的主要职责。有两种处理事件的做法: 轮询(Polling):在这种机制下,我们仅检查输入设备的当前状态,之前和之后的状态并无保存。这种输入事件处理适合处理诸如触屏按钮事件,而不适合跟踪文本的输入,因为按键事件的顺序并未保存。 基于事件的处理(Event-basedhandling):这种机制提供了记忆功能的事件处理,比较适合处理文本输入或者其他需要按键次序的操作。 在Android平台中,主要有三种输入事件:触屏事件、
5、按键事件和加速计事件,前两种时间使用轮询机制和基于事件处理的机制都适合,加速计事件通常是轮询机制。 触屏事件有三种: Touchdown:手机触屏时发生。 Touchdrag:手指拖动时发生,此前有Touchdown事件产生。 Touchup:手指抬起时发生。 每种触摸事件有相关的辅助信息:触屏的位置、指针索引(多点触摸时用来追踪识别不同的触点) 键盘事件包括两种: Keydown:按下键盘时触发。 Keyup:释放键盘时触发。 每种按键事件也有相关的辅助信息:Key-down事
6、件存储按键码,Key-up事件存储按键码和实际的Unicode字符。 加速计事件,系统不停的轮询加速剂的状态,并以三位坐标标识。 基于以上介绍,下面定义输入模块的一些接口,用来轮询触屏事件、按键事件和加速计事件。代码如下: Input.javapackagecom.badlogic.androidgames.framework;importjava.util.List;publicinterfaceInput{publicstaticclassKeyEvent{publicstaticfinalintKEY_D
7、OWN=0;publicstaticfinalintKEY_UP=1;publicinttype;publicintkeyCode;publiccharkeyChar;}publicstaticclassTouchEvent{publicstaticfinalintTOUCH_DOWN=0;publicstaticfinalintTOUCH_UP=1;publicstaticfinalintTOUCH_DRAGGED=2;publicinttype;publicintx,y;publicintpointer;}pub
8、licbooleanisKeyPressed(intkeyCode);publicbooleanisTouchDown(intpointer);publicintgetTouchX(intpointer);publicintgetTouchY(intpointer);publicfloatgetAccelX();publicfloatgetAc
此文档下载收益归作者所有