CN104866291A - 一种基于Android的手机2D游戏引擎 - Google Patents
一种基于Android的手机2D游戏引擎 Download PDFInfo
- Publication number
- CN104866291A CN104866291A CN201410062630.1A CN201410062630A CN104866291A CN 104866291 A CN104866291 A CN 104866291A CN 201410062630 A CN201410062630 A CN 201410062630A CN 104866291 A CN104866291 A CN 104866291A
- Authority
- CN
- China
- Prior art keywords
- animation
- game
- redundancy
- android
- class
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Processing Or Creating Images (AREA)
Abstract
本发明设计了***开发所需要的游戏引擎的各个模块。针对2D动画冗余的问题,结合Flash提供的XFL文档,提出了一种解决2D动画冗余的方法。针对Android上图像缩放模糊和***硬件限制的问题,改进了基于梯度最小准则的线性插值修正算法,在原算法的基础上引入了相邻像素相关性判断,以保留像素边缘信息的高频分量。本引擎具有能够提高游戏开发效率、减少游戏所需资源、提高图像缩放的显示效果的功能。附图为游戏引擎功能模块图。
Description
技术领域:
计算机科学与技术;
背景技术:
本发明涉及到的技术:Android多屏幕适配技术、Android动画技术、Android图像处理技术等。
发明内容:
本发明设计了***开发所需要的游戏引擎的各个模块。针对2D动画冗余的问题,结合Flash提供的XFL文档,提出了一种解决2D动画冗余的方法。针对Android上图像缩放模糊和***硬件限制的问题,改进了基于梯度最小准则的线性插值修正算法,在原算法的基础上引入了相邻像素相关性判断,以保留像素边缘信息的高频分量。本引擎具有能够提高游戏开发效率、减少游戏所需资源、提高图像缩放的显示效果的功能。
附图说明:
附图1为游戏引擎功能模块图。
附图2为游戏的整个运行状态图。
附图3为GameActivity类图。
附图4为游戏整体逻辑时序图。
附图5为游戏场景管理模块类关系图。
附图6为整个动画去冗余过程。
具体实施方式:
为实现游戏引擎的功能需求,将游戏引擎分成不同的模块有助于各个模块的相互独立以及以后功能的扩充,游戏引擎Idoodle的整个功能模块划分如附图1。其显示了游戏引擎主要由场景管理模块、动画管理模块、图像显示模块、资源管理模块、事件响应模块、整体逻辑控制模块组成。
场景管理模块:该模块提供游戏实体场景的管理,为各个场景分发事件响应以及绘图命令。
动画管理模块:负责动画资源文件的解析、动画的生成以及动画的灵活控制。该模块为开发人员使用2D帧动画提供了简单操作。
图像显示模块:该模块负责渲染线程的管理以及OpenGL ES绘图函数的封装。主要处理游戏中图像的绘制,包括建立OpenGL ES的引用对象,提供渲染线程与UI线程的同步,建立绘图精灵和网格绘制图像。
资源管理模块:负责对Android手机的各类资源文件包括图片资源文件、声音资源文件等的加载和操作提供方便的处理。
事件响应模块:负责Android***的各种事件的管理并提供相应的处理,包括按键事件、滑动事件,传感器事件的处理。
整体逻辑控制模块:负责组织各个模块,将模块组织起来协调工作。
整体逻辑控制模块管理整个游戏体的响应和交互。游戏体,是对游戏自身的抽象,它包括对游戏状态及其状态转换规则的抽象,它还包括对游戏运行逻辑的抽象。游戏一旦被启动,除游戏结束或暂停操作外,游戏一直处于运行状态并不断的循环重复着相同的动作。
附图2为游戏的整个运行状态图。游戏的主要状态有启动态、运行态、暂停态、停止态。为了良好地管理游戏的各个状态,本发明设计的整体逻辑控制由GameActivity类进行控制,该类继承于Activity并且包含了游戏的图像渲染类GameGraphics,文件处理类GameFiles,事件处理类Gamelnput,声音管理类GameAudio,游戏监听接口GameListener。Activity是Android提供的四大组件之一,其中的抽象方法onStart(),onPause()等提供了游戏的各个状态的响应接口。
附图3为显示了GameActivity类与其它主要类的关系。GameActivity继承于Activity,是游戏程序的创建入口;GameGraphics用于创建图像的渲染线程以及封装基于OpenGL ES相关的绘图函数,以提供便利的绘制接口;GameAudio是用于管理Android设备音频的播放,提供简单的音频调用接口;GameFiles用于引用Android设备创建的文件句柄,通过该类来管理和加载存放在Android设备不同位置的文件,对文件的操作提供了简洁的调用方式;Gamelnput用于处理Android设备事件的响应操作,以提供各个场景对事件的响应处理;GameListener用于创建游戏的实体部分,提供游戏实体部分的入口以及游戏各个场景的管理,是对游戏实体的抽象。
GameActivity中成员函数initiai ize(GameListener listener)接受一个游戏实体的对象参数并在函数的内部对各个模块对象的创建,创建这些对象后作为一个引用标识存在,以提供外部游戏实体GameListener的调用。其中,graphics对象用于图像渲染的绘制,graphics是实现了Renderer接口的对象,Renderer是Android用于GLSurfaceView以便访问OpenGL ES的APl所提供的公共接口。GLSurfaceView是Android提供的一个用于在非UI线程中进行渲染的视图类,因此graphics实际是由UI线程创建的一个独立逻辑渲染线程对象。
附图4为游戏整体逻辑时序图,表示了游戏开发者从创建游戏到游戏主体运行的时序关系。对图中的各个逻辑消息解释如下:
消息1:通过继承于Activity的GameActivity创建游戏,GameActivity对象在游戏的UI线程中。
消息2:在UI线程中创建一个游戏的实体对象,该对象是用户进行游戏逻辑世界维护和组织的逻辑抽象的实现,提供了游戏中的各种场景的管理。
消息3:在创建游戏的实体对象后,创建游戏所需要的图形渲染对象、游戏文件操作对象、游戏声音操作对象、以及游戏的事件处理对象。图形渲染对象提供了专门的渲染线程进行绘图,这样可以防止Android***在UI线程中进行大量图像绘制的时候,出现游戏等待的假死现象。
消息4:图像渲染对象在surfaceCreate的时候会调用GameListener类的实体对象进行资源的加载。
消息5:游戏实体对象通过游戏文件对象加载文件资源如图片资源,文本文件资源、二进制文件等。
消息6:游戏实体对象通过声音操作对象加载相应的声音文件。
消息7:图像渲染对象接受设备的输入事件,在渲染线程的onFrame()函数中处理队列事件中的事件。
消息8:图像渲染对象将事件的处理分发到游戏实体对象的各个场景进行处理,各个场景处理完自身的事件后进行统一的更新操作。
消息9:游戏实体对象的状态进行更新后,图像渲染对象调用游戏实体对象的绘图函数进行图像的绘制,显示到屏幕上。
游戏运行过程中不断的重复消息7-9过程,来完成游戏的实时响应以及显示。开发人员只需要管理游戏实体对象,完成游戏中各个场景的内部处理,调用资源管理接口进行资源的加载,事件响应的处理,调用相应的绘图函数接口进行绘制图像等就可以对游戏进行良好的控制和实现。
游戏场景管理模块负责游戏实体部分的各个场景地管理。该模块是对游戏逻辑世界的管理,负责游戏所需资源的加载、游戏世界中各种物体属性状态的维护、游戏世界的各种物体对输入事件的响应等。将游戏世界分成不同的各个场景,有助于维护各自的状态以及资源的托管,为游戏开发者提供清晰的维护思路和简单的操作方法。
游戏场景管理模块类关系图如附图5,MGame是游戏程序的实体类,该类负责游戏资源的加载,事件处理和分发,以及各个场景的绘制和管理。该类继承GameListener接口、InputProcessot接口、GestureListener接口,同时包含实现了绘图功能的精灵对象spritebatch、Android设备上下文的引用标识、游戏场景的引用标识。GameListener接口是在GameActivity中用来注册游戏实体的引用接口,用于从游戏的UI线程关联到游戏的实体部分;InputProcessor和GestureLi stener接口用于实现游戏实体对事件消息的响应和滑动手势的处理;spritebatch对象是一个封装了游戏的渲染功能的对象,用于场景中图像的绘制,该对象的设计在图像显示模块进行具体介绍;context是关于Android的设备上下文标识,用于使用Android自身应用程序接口来访问资源;screen对象是游戏中场景的一个引用标识,游戏实体在进行事件分发和绘制显示时,调用该引用来访问到当前的场景。Screen类是游戏场景的抽象表示,每一个游戏场景可能包含一个特定的游戏逻辑世界MWorld类或者便于对场景的元素进行管理进一步划分的逻辑层MLayer类。事件的响应和渲染操作从Game类进行分发到Screen类再到MWorld类和MLayer类,最后到游戏的实体元素MObject类。这样层次分明有助于游戏开发者任意的划分游戏中的各个场景,以方便的描述游戏的逻辑,同时按照这种处理约定可以最快地实现对游戏场景的操作和管理。
图像显示模块包含游戏中的渲染类以及使用OpenGL ES绘制图形的封装类SpriteBatch。渲染类创建渲染线程,建立OpenGL ES对象引用。绘制图形的封装类SpriteBatch封装底层OpenGL ES函数的复杂操作,提供方便的2D绘图接口,通过调用简单的绘制函数来实现高性能的渲染效果。
动画模块主要是为了开发人员能够以方便的方式生成和使用设计好的2D动画,并提供动画图片的去冗余处理,使用时依然可以使用Android提供的原始动画,两者相互不影响。动画模块的主要类是MFAnimation,该类完成动画文件的解析、生成、以及控制。
事件响应模块处理Android平台下的键盘事件、屏幕触摸事件、传感器事件、震动事件。事件响应处理统一封装到了GameInput类中,该类分离了事件在视图中的处理,将事件的处理统一由游戏实体中的事件处理对象input引用,再将事件分别分发到游戏实体中的各个场景,便于游戏场景对事件的响应,当Android对事件的处理发生变化的时候,只需要修改Gamelnput类的实现,游戏本身不需要修改。
资源管理模块负责Android平台下声音、图片资源的加载以及使用。为方便资源文件的访问,设计四种访问资源文件的路径:内部文件、扩展文件、绝对路径文件、本地路径文件。内部文件是由Android提供的asserts目录下的文件;扩展文件是Android提供的放在存储卡上的文件;绝对路径文件是Android上的完整路径名文件;本地路径文件是当前程序根目录下的相对路径文件。Android资源通过AssetManager进行访问,AssetManager负责资源文件的数据的读取。为方便声音资源、图片资源的使用,对这两部分进行分别的实现,其它资源文件的访问可由AssetManager进行直接的访问。
1.声音管理模块的设计与实现
Android平台下的声音分为两类:Sound和Music,Sound类型的声音文件资源小、播放时间短;Music类型的声音文件资源大、播放时间长。Sound类型的声音文件由SoundPool进行管理和播放,Music类型的声音文件由MediaPlayer进行管理和播放。游戏引擎Idoodle中声音资源模块的管理和使用统一封装到了GameAudio类中。
2.图片管理模块设计与实现
为提供图像显示模块中绘图的实现,图片资源统一被封装在Texutre中,以纹理的方式存在。Texture类是一个包含有图像像素数据,以及封装了OpenGL ES的纹理常用操作的类。为提高图像的渲染速度,将同时需要渲染的图片一次提交,设计了TextureRegion类,该类是包含Texture引用对象的类。Texture类对应的图片资源包含多个需要渲染的小的图片资源,TextureRegion类是对小的图片资源的引用。
Android动画去冗余:整个动画去冗余过程如附图6,首先使用Flash CS5制作相应的动画,将一类动画作为一组,使用第三方的合图软件将一组动画中所有的小图合成为一张大图,同时得到小图所在的大图的位置描述信息,然后通过分析DOMDocument.xml文件提取相应的信息并结合合图的相关信息,得到一个包含有所有动画图片的大图以及每一个动画的所有描述信息,最后使用动画模块来实现动画的解析与控制。通过对动画去冗余的分析以及实际在项目中的使用情况,动画资源大约可以去掉70%的图片冗余。
基于梯度最小准则的线性插值修正算法的改进,在原算法的基础上引入了相邻像素相关性判断,以保留像素边缘信息的高频分量。
1.确定与插值点最近的三点,作为相关性点的选择点。
2.确定相关性大的两点的像素值,作为插值参考点的像素值。
3.确定相关性大的两点的像素值,作为插值参考点的像素值。
将一维扩展到二维情况:按照以上插值计算步骤,首先将原始图像按照缩放比实现水平方向放大得到中间图像,然后再将中间图像按照垂直方向放大,得到最终的图像。
Claims (3)
1.一种基于Android的手机2D游戏引擎的特点:
(1)提出了一种解决2D动画冗余的方法;
首先使用Flash CS5制作相应的动画,将一类动画作为一组,使用第三方的合图软件将一组动画中所有的小图合成为一张大图,同时得到小图所在的大图的位置描述信息,然后通过分析DOMDocument.xml文件提取相应的信息并结合合图的相关信息,得到一个包含有所有动画图片的大图以及每一个动画的所有描述信息,最后使用动画模块来实现动画的解析与控制。通过对动画去冗余的分析以及实际在项目中的使用情况,动画资源大约可以去掉70%的图片冗余。
(2)改进型基于梯度最小准则的线性插值修正算法;
1)确定与插值点最近的三点,作为相关性点的选择点。
2)确定相关性大的两点的像素值,作为插值参考点的像素值。
3)确定相关性大的两点的像素值,作为插值参考点的像素值。
将一维扩展到二维情况:按照以上插值计算步骤,首先将原始图像按照缩放比实现水平方向放大得到中间图像,然后再将中间图像按照垂直方向放大,得到最终的图像。
2.根据权利1要求的2D动画去冗余技术。
3.根据权利1要求的改进型基于梯度最小准则的线性插值修正算法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410062630.1A CN104866291A (zh) | 2014-02-24 | 2014-02-24 | 一种基于Android的手机2D游戏引擎 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410062630.1A CN104866291A (zh) | 2014-02-24 | 2014-02-24 | 一种基于Android的手机2D游戏引擎 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104866291A true CN104866291A (zh) | 2015-08-26 |
Family
ID=53912144
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410062630.1A Pending CN104866291A (zh) | 2014-02-24 | 2014-02-24 | 一种基于Android的手机2D游戏引擎 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104866291A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105553708A (zh) * | 2015-12-14 | 2016-05-04 | 江苏名通信息科技有限公司 | 一种***平台管理*** |
CN105630507A (zh) * | 2015-12-29 | 2016-06-01 | Tcl集团股份有限公司 | 一种WebView控件界面绘制的方法和装置 |
CN105653267A (zh) * | 2015-12-28 | 2016-06-08 | 心动网络股份有限公司 | 电子设备及数据处理方法 |
CN107678804A (zh) * | 2017-08-22 | 2018-02-09 | 腾讯科技(深圳)有限公司 | 行为执行方法和装置、存储介质及电子装置 |
CN109828791A (zh) * | 2018-12-28 | 2019-05-31 | 北京奇艺世纪科技有限公司 | 一种动画播放方法、终端和计算机可读存储介质 |
CN110300332A (zh) * | 2019-06-18 | 2019-10-01 | 南京科源信息技术有限公司 | 一种基于iptv的游戏加载方法及*** |
-
2014
- 2014-02-24 CN CN201410062630.1A patent/CN104866291A/zh active Pending
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105553708A (zh) * | 2015-12-14 | 2016-05-04 | 江苏名通信息科技有限公司 | 一种***平台管理*** |
CN105653267A (zh) * | 2015-12-28 | 2016-06-08 | 心动网络股份有限公司 | 电子设备及数据处理方法 |
CN105653267B (zh) * | 2015-12-28 | 2019-05-07 | 心动网络股份有限公司 | 电子设备及数据处理方法 |
CN105630507A (zh) * | 2015-12-29 | 2016-06-01 | Tcl集团股份有限公司 | 一种WebView控件界面绘制的方法和装置 |
CN107678804A (zh) * | 2017-08-22 | 2018-02-09 | 腾讯科技(深圳)有限公司 | 行为执行方法和装置、存储介质及电子装置 |
CN107678804B (zh) * | 2017-08-22 | 2021-04-09 | 腾讯科技(深圳)有限公司 | 行为执行方法和装置、存储介质及电子装置 |
CN109828791A (zh) * | 2018-12-28 | 2019-05-31 | 北京奇艺世纪科技有限公司 | 一种动画播放方法、终端和计算机可读存储介质 |
CN110300332A (zh) * | 2019-06-18 | 2019-10-01 | 南京科源信息技术有限公司 | 一种基于iptv的游戏加载方法及*** |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104866291A (zh) | 一种基于Android的手机2D游戏引擎 | |
CN108010112B (zh) | 动画处理方法、装置及存储介质 | |
CN103562862B (zh) | 全局合成*** | |
KR20200027004A (ko) | 게임 렌더링 방법, 및 게임 자원 파일 생성 방법, 장치, 및 기기 | |
EP2464093B1 (en) | Image file generation device, image processing device, image file generation method, and image processing method | |
CN103914205B (zh) | 一种智能终端的文件缩略图展示方法和装置 | |
US20050138567A1 (en) | Method of realistically displaying and interacting with electronic files | |
WO2013182089A1 (zh) | 一种悬浮对象的实现方法与装置 | |
US10474574B2 (en) | Method and apparatus for system resource management | |
CN113411664B (zh) | 基于子应用的视频处理方法、装置和计算机设备 | |
CN110516179A (zh) | 图形渲染方法、装置、电子设备及存储介质 | |
CN107122176B (zh) | 一种图形绘制方法及装置 | |
CN104321752A (zh) | 虚拟表面分配 | |
CN102193806B (zh) | 更新动画的方法和装置 | |
CN105321142A (zh) | 经由计算流水线进行的采样、错误管理和/或上下文切换 | |
TW201826109A (zh) | 頁面展示方法及裝置 | |
CN103729174A (zh) | 截屏方法及装置 | |
WO2022033162A1 (zh) | 一种模型加载方法以及相关装置 | |
CN105190701A (zh) | 基于原语的合成 | |
WO2019071618A1 (zh) | 一种图像处理方法及设备 | |
KR20210104143A (ko) | 이미지 획득 방법, 기기, 서버 및 저장 매체 | |
CN110443880B (zh) | 图像渲染方法、装置、存储介质及电子设备 | |
EP4358028A1 (en) | Graphic rendering method and apparatus, and storage medium | |
WO2022247541A1 (zh) | 一种应用程序动效衔接的方法及装置 | |
US7743387B2 (en) | Inheritance context for graphics primitives |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20150826 |
|
WD01 | Invention patent application deemed withdrawn after publication |