对于我的Android游戏,基于AndEngine,我目前正致力于加载关卡。
我遇到了AndEngine-PhysicsEditor-Extension,它加载了由PhysicsEditor导出的XML和图片。
我现在正在创建一个类,方便地命名为MapLoader,它接受一个地图名称并调用PhysicsEditor扩展来加载适当的文件并注册它们。问题是,当图形按预期显示时,场景中的任何其他内容都会直接通过它而不会发生碰撞。
以下是调用MapLoader的方法:
MapLoader loader = new MapLoader(this, engine, world); // (Context, PhysicsWorld, Scene)
loader.loadMap("testmap1");
以下是MapLoader类的重要部分:
// Constructor
public void loadMap(String mapName) {
this.atlas = new BitmapTextureAtlas(game.getTextureManager(), 2048, 1024, TextureOptions.BILINEAR);
atlas.load();
PhysicsEditorLoader loader = new PhysicsEditorLoader();
this.tMap = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.atlas, game, "maps/" + mapName + ".png", 0, 0);
this.sMap = new Sprite(0, 500, this.tMap, game.getVertexBufferObjectManager());
this.world.attachChild(sMap);
try {
loader.load(game, engine, "maps/" + mapName + ".xml", sMap, true, true);
} catch (IOException e) {
e.printStackTrace();
System.out.println("XML load failure");
}
this.sMap = new Sprite(0, 0, this.tMap, game.getVertexBufferObjectManager());
world.attachChild(sMap);
world.registerUpdateHandler(engine);
}
// .......Snip...........
// loadMap method
public void loadMap(String mapName) {
this.atlas = new BitmapTextureAtlas(game.getTextureManager(), 2048, 1024, TextureOptions.BILINEAR);
atlas.load();
final PhysicsEditorLoader loader = new PhysicsEditorLoader();
this.tMap = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.atlas, game, "maps/" + mapName + ".png", 0, 0);
this.sMap = new Sprite(0, 500, this.tMap, game.getVertexBufferObjectManager());
this.world.attachChild(sMap);
try {
loader.load(game, engine, "maps/" + mapName + ".xml", sMap, true, true);
} catch (IOException e) {
e.printStackTrace();
}
this.sMap = new Sprite(0, 0, this.tMap, game.getVertexBufferObjectManager());
world.attachChild(sMap);
world.registerUpdateHandler(engine);
}
我错过了什么吗?我将上述代码基于example。
我已经尝试编辑源以指向XML加载的不存在的目录,之后它开始抱怨,表明找到了XML。
修改:如果怀疑某些内容存在错误,我已将其上传以供检查here。它是在PhysicsEditor中通过添加精灵创建的,使用形状跟踪器获取轮廓,并导出为AndEngine导出器。 XML存储在assets/maps/
中,关联的精灵存储在assets/gfx/maps/
PS:在我开始测试之前,我正在使用PhysicsEditor的试用版。我不相信它会影响结果。