AndEngine引擎的学习笔记(一)

LevelLoaderExample

学习笔记有点乱,看到哪就记到哪。


今天看的是AndEngineExample中的LevelLoaderExample,当然前面也看了很多个Example,对整个框架的结构还是比较了解,

一般新建一个游戏类,都要去继承BaseGameActivity,然后实现里面的四个方法,分别为:onLoadEngine(),onLoadResources(),onLoadScene(),onLoadComplete();

onLoadEngine()即加载引擎,一般在里面初始化Engine;

onLoadResources()即加载游戏资源,包括游戏精灵用到的纹理了;

onLoadScene()即加载游戏场景,场景在学习OpenGL时,很常用,这个概念不难理解,就和电影中的场景差不多;

onLoadComplete()即加载游戏完成之后所要执行的内容。


今天看的是LeveLoaderExample,所以就要对立面我不懂的,或者认为应该记录的,总结一下:

1、关于Example中的level文件夹下面的example.lvl文件的理解,首先,它就属于游戏开发过程中的地图,我几乎没有开发过游戏,所以不太懂,就是为了贴图用的,和数组贴图差不多,至于它是用什么工具生成的,暂时还不了解。它的格式应该属于固定的

<level>

<entity x="208" y="32" width="16" height="16" type="box"/>

</level>

当然,他有固定的XML格式,那就有固定的解析方式,它的解析方式如下:

final LevelLoader levelLoader = new LevelLoader();此段代码用来初始化即将使用的LevelLoader类,类里面有个重要的方法,应该说是在LevelLoaderExample中的方法,我也不知道它重不重要。呵呵……分别是a、

levelLoader.registerEntityLoader(LevelConstants.TAG_LEVEL, new IEntityLoader() {

@Override

public void onLoadEntity(final String pEntityName, final Attributes pAttributes) {

final int width = SAXUtils.getIntAttributeOrThrow(pAttributes, LevelConstants.TAG_LEVEL_ATTRIBUTE_WIDTH);

final int height = SAXUtils.getIntAttributeOrThrow(pAttributes, LevelConstants.TAG_LEVEL_ATTRIBUTE_HEIGHT);

Toast.makeText(LevelLoaderExample.this, "Loaded level with width=" + width + " and height=" + height + ".", Toast.LENGTH_LONG).show();

}

});

b、

levelLoader.registerEntityLoader(TAG_ENTITY, new IEntityLoader() {

@Override

public void onLoadEntity(final String pEntityName, final Attributes pAttributes) {

final int x = SAXUtils.getIntAttributeOrThrow(pAttributes, TAG_ENTITY_ATTRIBUTE_X);

final int y = SAXUtils.getIntAttributeOrThrow(pAttributes, TAG_ENTITY_ATTRIBUTE_Y);

final int width = SAXUtils.getIntAttributeOrThrow(pAttributes, TAG_ENTITY_ATTRIBUTE_WIDTH);

final int height = SAXUtils.getIntAttributeOrThrow(pAttributes, TAG_ENTITY_ATTRIBUTE_HEIGHT);

final String type = SAXUtils.getAttributeOrThrow(pAttributes, TAG_ENTITY_ATTRIBUTE_TYPE);



LevelLoaderExample.this.addFace(scene, x, y, width, height, type);

}

});

两个方法的参数不一样,第一个是加载父标签<level>的属性,本代码中并没有后续的执行过程,第二个是加载<entity>的标签中的属性,当然,该方法后面有后续行为,就是

LevelLoaderExample.this.addFace(scene, x, y, width, height, type);将解析出来的每个Entity(每个实体、节点)加载到Scene场景中去。


addFace这个方法是作者自定义的方法,里面主要是加载不同类型(刚才解析出来的Type)的精灵,这些精灵是之前已经声明好的,精灵类的声明,要注意TiledTextureRegion

的构造,

this.mCircleFaceTextureRegion = BitmapTextureAtlasTextureRegionFactory.createTiledFromAsset(this.mBitmapTextureAtlas, this, "face_circle_tiled.png", 0, 32, 2, 1); // 64x32

参数中的0,32对应的是TextRegion中的位置,而不是整个屏幕的位置。


当然,它和一般XML文件解析框架差不多,具体点,我觉得应该是Dom解析。

执行顺序大概是这样子的:

levelLoader.loadLevelFromAsset(this, "example.lvl");-->a-->b


遗留的问题:关于Texture的定义参数中,非要是2的幂,这一点不太懂,估计要看源码才能懂。

简单的笔记做完了,仅供自己查阅补漏。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值