如何在AndEngine中删除以前的级别实体?

时间:2015-10-13 06:00:16

标签: java android xml andengine

在我的游戏中,我有6个级别,任何级别都有XML文件...我遇到了最终级别的问题...当玩家碰撞到精灵(它在最终级别)时我想加载下一个级别,但在加载下一级时在代码下,显示两级实体...如何删除以前级别的实体?

XML文件

<level width="10000" height="1000" background="back1">  
<entity x="100" y="100" type="sp"/>
<entity x="230" y="100" type="fa"/>
<entity x="440" y="190" type="su"/>
<entity x="660" y="240" type="sp"/>
...
<entity x="415" y="340" type="coin1"/>
<entity x="465" y="340" type="coin1"/>
<entity x="805" y="360" type="coin2"/>
<entity x="60" y="140" type="player"/>
<entity x="6000" y="360" type="levelEnd"/>
</level>

GameScene

public void loadLevel(int levelID) {
levelLoader.registerEntityLoader(new EntityLoader<SimpleLevelEntityLoaderData>(
                    TAG_ENTITY) {
                public IEntity onLoadEntity( final String pEntityName,
                        final IEntity pParent,
                        final Attributes pAttributes,
                        final SimpleLevelEntityLoaderData  pSimpleLevelEntityLoaderData)
                        throws IOException {
                    final int x = SAXUtils.getIntAttributeOrThrow(
                            pAttributes, TAG_ENTITY_ATTRIBUTE_X);
                    final int y = SAXUtils.getIntAttributeOrThrow(
                            pAttributes, TAG_ENTITY_ATTRIBUTE_Y);
                    final String type = SAXUtils.getAttributeOrThrow(
                            pAttributes, TAG_ENTITY_ATTRIBUTE_TYPE);

                    final Sprite levelObject;
                    if (type.equals(TAG_ENTITY_ATTRIBUTE_TYPE_VALUE_LEVEL_END)) {
                        levelObject = new Sprite(x, y,
                                resourceManager.game_end_region, vbom) {
                            @Override
                            protected void onManagedUpdate(
                                    float pSecondsElapsed) {
                                super.onManagedUpdate(pSecondsElapsed);

                                if (player.collidesWith(this)) {

                                    swipeScene();
                                }
                            }
                        };
                        levelObject.registerEntityModifier(new LoopEntityModifier(
                                        new ScaleModifier(1, 1, 1.3f)));
                    }
}

swipeScene:

    public void swipeScene() {
    resourceManager.mMusic1.stop();
    createHUD();
    createPhysics();
    resourceManager.loadGameResources();
    loadLevel(SceneManager.getInstance().levelN + 1);
    setOnSceneTouchListener(this);
}

1 个答案:

答案 0 :(得分:0)

这个答案是关于在AndEngine中释放资源的:

您可以通过以下方式释放资源:

删除纹理:

this.service.getTextureManager().unloadTexture(texturename); 
texturename.unload();

参考:http://www.appsrox.com/android/tutorials/flappychick/3/

删除实体:

yourEntity.detachSelf();
yourEntity.dispose();

参考:http://www.matim-dev.com/how-to-safely-remove-sprite.html