e3roid是一款为android平台提供的开源2d游戏引擎,其主页为http://www.e3roid.com/,在其主页业已包括的信息本文将不再赘述。关于android平台游戏引擎的不给力与各种介绍,cping1982前辈在其主页中已多有说明(http://blog.csdn.net/cping1982)。与相似引擎AndEngine相比,e3roid架构合理,并且有API说明(http://www.e3roid.com/doc/),免去仅凭阅读实例猜测用法的苦恼;反过来说,AndEnigne的实例也可作为e3roid的补充,盖其本身实例较前者匮乏,而作者本人也承认e3roid对于AndEngine的继承关系。本文仅就e3roid引擎资料缺乏的情况之下,提供个人的学习研究心得,更为重要的目的在于为应用作一些铺垫。研究方法十分朴素,即以源码+文档+实例,希望能够有所收获。当然,错误也在所难免,敬请谅解。
本文所用e3roid为1.2.11版本。
e3roid由以下package构成,即[e3roid][audio][drawable][event][lifecircle][opengl][physics][script][util][service][transport],其中,[script]用于多种语言实现(目前支持Java, Javascript, Lua),[util]提供通用类,[service]与[transport]用于网络通信,亦即在通常情况下开发者只需专注于其他内容,而这一部分的内容由package的名称即很容易理解其内容。
下面将分述各包的内容与用法。
e3roid的基础类E3Activity, E3Engine, E3Scene出现于[e3roid]之中。作为一款面向android平台的游戏引擎,Activity类为必备要素。使用一个实例来描述基础类的运用十分必要。一个标准的e3roid应用,至少应对E3Activity进行如下继承。本例来自于HUDExample,除了本例之外,SceneUpdateExample也是E3Scene的重要实例。在大致像样的应用之中,依次调用onLoadEngine()->onLoadScene()->onLoadResource()之后,必须有一个Update()函数用以刷新。
[audio]包由AudioInputListener接口与AudioInputeService类组成。前者用于接收声音输入,后者用于提供声音输入录制服务;除了标准的lifecircle之外,AudioInputService提供了诸如run(), isRecording(), readAs16bitWave()等简单实用的函数。官方给出的example为AudioInputExample。初步鉴定e3droid中并未提供如AndEngine中的SoundFactory类,这多少为游戏声音编程带来一些麻烦,但依靠android自身提供的功能大可完成一般性质的任务。其实AndEngine之中也不过进一步封装而已。具体方法详见Beginning Android Game 2011一书。
值得注意的是,当进行Shape(Background, Sprite)的清除工作时,需要重载父函数的onRemove(), onDispose()等方法,并且,被清除的对象不可再被调用,若只是想要隐藏,使用SetVisible()即可。
[drawable]其下还有[controls][modifier][texture][sprite][tmx]等子包,展示了其高级用法,下面就来进一步学习。
[controls]主要提供虚拟摇杆的支持,其下有StickController与DigitalController两个类,其中后者为对前者的继承。官方文档说明前者为analog on-screen control,而后者为digital on-screen control,但二者的区别我尚未明晰。官方实例提供DigitalControllerExample, AnalogControllerExamplem, MultiTouchControllerExample,为一个基本完整的模拟摇杆实例。目前感觉此包是专门的模拟控制,如需特别控制则以应用onSceneTouchEvent(), onTouchEvent()为佳。
[modifier]提供修改可绘制对象的接口,其中大多数类都可从名称中获取其含义。ShapeModifier是其抽象基类,其下派生出ParallelModifier, ProgressAware, ProgressModifier, SequenceModifier, SpanModifier,其中,ProgressAware, ProgressModifier用于控制进程,SequenceModifier提供设置循环方法,其他待考证。ProgressAware下派生出AlphaModifier, AxisModifier, ColorModifier, MoveModifier, RotateModifier, ScaleModifier等更为实用的具体类。官方提供的实例有AlphaModifierExample, AxisModifierExample, ColorModifierExample, MoveModifierExample, RotateAndScaleModifierExample。由以上实例可以看出,任何Modifier类均需要以ProgressModifier进行初始化,并且调用onModifierStart(), onModifierFinished()方法。进一步的研究将在真机到手之后跟进。
值得注意的是在[modifier]之下尚有被作者称为for easing actions的[function]包,其具体作用目前尚不清楚。
[sprite]提供sprite的特殊绘制方法,包括AnimatedSprite, TerminalSprite, TiledSprite, TextSprite,其意自明。官方提供的实例有AnimatedSpriteExample, TiledBackgroundExample, TiledSpriteExample。在具体实现上,则可在上面的例子中加入如下代码。AnimatedSprite.Frame是[sprite]下的一个数组,用以存放动画的帧。
以上基本理过e3roid的架构与实例。
本文所用e3roid为1.2.11版本。
e3roid由以下package构成,即[e3roid][audio][drawable][event][lifecircle][opengl][physics][script][util][service][transport],其中,[script]用于多种语言实现(目前支持Java, Javascript, Lua),[util]提供通用类,[service]与[transport]用于网络通信,亦即在通常情况下开发者只需专注于其他内容,而这一部分的内容由package的名称即很容易理解其内容。
下面将分述各包的内容与用法。
- [e3roid] 基础类
e3roid的基础类E3Activity, E3Engine, E3Scene出现于[e3roid]之中。作为一款面向android平台的游戏引擎,Activity类为必备要素。使用一个实例来描述基础类的运用十分必要。一个标准的e3roid应用,至少应对E3Activity进行如下继承。本例来自于HUDExample,除了本例之外,SceneUpdateExample也是E3Scene的重要实例。在大致像样的应用之中,依次调用onLoadEngine()->onLoadScene()->onLoadResource()之后,必须有一个Update()函数用以刷新。
public class TestExample extends E3Activity{ // The width and height for the scene. private final static int WIDTH = 320; private final static int HEIGHT = 480; // Textures. private Texture robotTexture; private Texture hudTexture; @override public E3Engine onLoadEngine(){ // Initiating the engine. E3Engine engine = new E3Engine(this, WIDTH, HEIGHT); // Asking for the full screen request. engine.requestFullScreen(); // Asking for the portrait request. engine.requestPortrait(); return engine; } @override public E3Scene onLoadScene(){ // Initiating the scene. E3Scene scene = new E3Scene(); // Load the texture for hud. Sprite hud = new Sprite(hudTexture, centerX, centerY); scene.addHUD(hud); // Set the position. centerX = (getWidth() - robotTexture.getWidth()) / 2; centerY = (getHeight() - robotTexture.getHeight()) / 2; // Load the texture for backgroud. Background background = new Background( new TiledTexture("background.png", getWidth(), getHeight(), this)); scene.getTopLayer().setBackground(background); // Load the texture for robot. Sprite robot = new Sprite(robotTexture, centerX, centerY); scene.getTopLayer().add(robot); return scene; } @verride public void onLoadResources(){ robotTexture = new AssetTexture("robot.png", this); hudTexture = new AssetTexture("controller_base.png", this); } }
- [audio]
[audio]包由AudioInputListener接口与AudioInputeService类组成。前者用于接收声音输入,后者用于提供声音输入录制服务;除了标准的lifecircle之外,AudioInputService提供了诸如run(), isRecording(), readAs16bitWave()等简单实用的函数。官方给出的example为AudioInputExample。初步鉴定e3droid中并未提供如AndEngine中的SoundFactory类,这多少为游戏声音编程带来一些麻烦,但依靠android自身提供的功能大可完成一般性质的任务。其实AndEngine之中也不过进一步封装而已。具体方法详见Beginning Android Game 2011一书。
- [drawable]
值得注意的是,当进行Shape(Background, Sprite)的清除工作时,需要重载父函数的onRemove(), onDispose()等方法,并且,被清除的对象不可再被调用,若只是想要隐藏,使用SetVisible()即可。
[drawable]其下还有[controls][modifier][texture][sprite][tmx]等子包,展示了其高级用法,下面就来进一步学习。
[controls]主要提供虚拟摇杆的支持,其下有StickController与DigitalController两个类,其中后者为对前者的继承。官方文档说明前者为analog on-screen control,而后者为digital on-screen control,但二者的区别我尚未明晰。官方实例提供DigitalControllerExample, AnalogControllerExamplem, MultiTouchControllerExample,为一个基本完整的模拟摇杆实例。目前感觉此包是专门的模拟控制,如需特别控制则以应用onSceneTouchEvent(), onTouchEvent()为佳。
[modifier]提供修改可绘制对象的接口,其中大多数类都可从名称中获取其含义。ShapeModifier是其抽象基类,其下派生出ParallelModifier, ProgressAware, ProgressModifier, SequenceModifier, SpanModifier,其中,ProgressAware, ProgressModifier用于控制进程,SequenceModifier提供设置循环方法,其他待考证。ProgressAware下派生出AlphaModifier, AxisModifier, ColorModifier, MoveModifier, RotateModifier, ScaleModifier等更为实用的具体类。官方提供的实例有AlphaModifierExample, AxisModifierExample, ColorModifierExample, MoveModifierExample, RotateAndScaleModifierExample。由以上实例可以看出,任何Modifier类均需要以ProgressModifier进行初始化,并且调用onModifierStart(), onModifierFinished()方法。进一步的研究将在真机到手之后跟进。
值得注意的是在[modifier]之下尚有被作者称为for easing actions的[function]包,其具体作用目前尚不清楚。
[sprite]提供sprite的特殊绘制方法,包括AnimatedSprite, TerminalSprite, TiledSprite, TextSprite,其意自明。官方提供的实例有AnimatedSpriteExample, TiledBackgroundExample, TiledSpriteExample。在具体实现上,则可在上面的例子中加入如下代码。AnimatedSprite.Frame是[sprite]下的一个数组,用以存放动画的帧。
// Add animation frames from tile. ArrayList<AnimatedSprite.Frame> frames = new ArrayList<AnimatedSprite.Frame>(); frames.add(new AnimatedSprite.Frame(0, 0)); frames.add(new AnimatedSprite.Frame(1, 0)); frames.add(new AnimatedSprite.Frame(2, 0)); frames.add(new AnimatedSprite.Frame(3, 0)); // Start animation with 500msec, infinite loop. sprite = new AnimatedSprite(texture, centerX, centerY); sprite.animate(500, frames);
需要停止播放动画则可加入
if (sprite.isAnimated()) sprite.stop();非常方便。
TiledSprite目前不在本文关注范围之内。
- [event]
- [lifecircle]
- [opengl]
- [physics]
以上基本理过e3roid的架构与实例。
没有评论:
发表评论