如何删除 AndEngine 中的上一级实体?
How to remove previous level entities in 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>
游戏场景
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)));
}
}
滑动场景:
public void swipeScene() {
resourceManager.mMusic1.stop();
createHUD();
createPhysics();
resourceManager.loadGameResources();
loadLevel(SceneManager.getInstance().levelN + 1);
setOnSceneTouchListener(this);
}
本回答是关于在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
在我的游戏中,我有 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>
游戏场景
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)));
}
}
滑动场景:
public void swipeScene() {
resourceManager.mMusic1.stop();
createHUD();
createPhysics();
resourceManager.loadGameResources();
loadLevel(SceneManager.getInstance().levelN + 1);
setOnSceneTouchListener(this);
}
本回答是关于在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