我这里有两个精灵 easyEnemy 和 BullDozer。easyEnemy 每秒生成一次。所以我使用时间处理程序。推土机随机出现一次。
编辑:
我使用通用池来重用easyEnemy。重新启动时,我将它们发送到池中以供重用。对于推土机,我使用正常程序。
我想首先展示推土机easyEnemy。我为此创建了两个图层。喜欢:GameScene 内部:
final int FIRST_LAYER = 0;
final int SECOND_LAYER = 1;
// i call this very first entities in scene
public void createLayers() {
attachChild(new Entity()); // First Layer
attachChild(new Entity()); // Second Layer
}
我将场景中的第一个实体称为 createLayers(),显然只有一次。我在场景中附加了easyEnemy和推土机,例如:
// it is called in every seconds inside time handler
getChildByIndex(FIRST_LAYER).attachChild(aEasyEnemy);
// it is called only once
getChildByIndex(SECOND_LAYER).attachChild(aBulldozer);
它第一次运行良好。Bulldozer 在easyEnemy 上方移动。:)
问题:
当我重新开始游戏时,只有推土机首先带有缩放。但我没有缩放推土机。推土机离开现场后,容易的敌人来了。并且相机的高度和宽度也在设备内部缩短。行为与第一次运行不同。我在重新启动时会做什么?代码如下。
更新:
public void onGameRestart() {
if (hasChildScene()) {
clearChildScene();
detachChildren();
clearTouchAreas();
clearEntityModifiers();
clearUpdateHandlers();
reset();
back();
// sorry I recycle easy Enemy by using pool
recycleEasyEnemy();
// create layers again
createLayers();
// call to come again
createEasyEnemy(.6f, 28f, 28f);
createBullDozer();
}
}
更新:这里是 recycleEasyEnemy 代码:
public void recycleEasyEnemy() {
// send them to pool for reuse
for (EasyEnemy e : easyEnemyLinkedList) {
EasyEnemyPool.getSharedEasyEnemyPool().recyclePoolItem(e);
}
easyEnemyLinkedList.clear();
}
很抱歉之前没有显示我的 recycleEasyEnemy 代码。运行这个版本后,只剩下一个问题,那就是Easy Enemy是在推土机重启后通过现场后出现的。
注意:当我不调用 recycleEasyEnemy 时,它就像第一次运行一样工作正常。但我必须重用easyEnemy!每次重启!不是吗?
已解决:解决了新的相机高度/宽度问题。
我差不多完成了。我需要专家对这段代码的关注。为简单起见,我只是避免使用常见的代码块。谢谢。;)
帖子也在这里: