既然是学新的游戏引擎,那么首先要对它的框架有所了解,所谓知己知彼,百战不殆嘛!或许,刚开始看完之后你没有任何感受,但是,相信我,总有一天,你会回来再看一遍的!
一、应用的生命周期
游戏应该高效和稳定,特别是对于android平台。目前的开发都是面向手机和平板。如果有效的管理资源,如何高效的运行都是非常重要的。试想一个制作优美,可玩性高的游戏运行于你的android手机上却10秒钟崩溃一次,运行时卡的如同在看漫画,我只能说,孩子,别糟蹋手游了!哈哈
下面是基本生命周期:
图片分享:
二、.游戏构架
这个框架,是我借鉴别人的,觉得挺有道理,就拿来用下。
一个应用划分下来,就大致为如下结构:
输入指的是用户的响应,可以使点击(Touch)或者点击(Click),拖拽(Drag)等。
输出一般是图片和声音或者影像或者是一些效果,当然也有文件或者其他数据(比如网络的存储)。
而在输入中的文件一般为图片和声音,逻辑由数学逻辑和物理逻辑构成。
Libgdx对于物理上处理是Box2D的封装,可以满足一般需求了。对于数学的封装了一些常见的结构和少量算式,不过可以基于此开发自己需要的算法。
libgdx对于图像和声音等文件的处理比较好,可以直接使用。
三、主要方法(重要)
这些方法 由在应用声明周期中的事件触发,描述如下:
方法名 |
描述 |
create () |
当应用程序创建时,此方法被调用一次 |
resize(int width, int height) |
每次游戏屏幕重置尺寸并且不是暂停状态得时候调用此方法。在create()后调用一次 参数是屏幕被重置后的新宽度和高度 |
render () |
每次渲染发生时游戏循环调用此方法。游戏更新发生在绘制之前。意思就是说先处理逻辑,在处理绘制。 |
pause () |
在应用destroyed前调用此方法。在android中档Home键按下或者由重新进入程序时调用此方法。在桌面应用中,退出应用时在dispose() 之间调用 这是一个保存游戏状态的好地方,在android中resume ()不一定会被调用。 |
resume () |
这个方法仅在android中调用, 当应用获得焦点时. 桌面应用中将不会调用此方法。 |
dispose () |
当应用destroyed时,调用此方法,在pause()之后。注意:此方法不会主动调用,必须手动调用!其中,AssetManager,BitmapFont,BitmapFontCache,CameraGroupStrategy,DecalBatch,ETC1.ETC1Data,FrameBuffer,Gdx2DPixmap,IndexArray,IndexBufferObject,IndexBufferObjectSubData,MD5Renderer,Mesh,ParticleEffect,ParticleEffectPool.PooledEffect,Pixmap,PixmapPacker,ShaderProgram,SimpleTileAtlas,Skin,SpriteBatch,SpriteCache,Stage,Texture,TextureAtlas,TileAtlas,TileMapRenderer,VertexArray,VertexBufferObject,VertexBufferObjectSubData,World都是需要手动回收的,因此一定不要忘记手动回收,Android设备的内存十分有限!(一些常用的我用绿色标注了!) |
Android一般不用管resize(),我们在create中实例化所需的对象,在render()中进行绘制。pause()时可以保持当前的灵活数据。dispose()销毁对象。而在resume()中根据保持的数据对游戏进行还原。其实说不负责一点,dispose()你可以不管,android系统会自动回收一些,用户对于退出后的短暂停滞也是有接受能力的。create()你也可以水一些,大不了进入游戏或者初始化相关场景时速度慢一些罢了。但是pause()和resume()你必须认真处理。电话是最常见的意外性中断,不会有用户偏爱一个电话就可以让记录或者进度消失的游戏的。