我在这里有两个精灵easyEnemy&推土机。 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);
它第一次正常工作。推土机在easyEnemy上方移动。 :)
问题:
当我重新开始游戏时,只有推土机首先带有缩放功能。但我没有按比例缩放bullDozer。在推土机从场景中传出后,容易发生敌人的攻击。相机的高度和宽度也会缩短设备内部。行为与第一次运行不一样。我在重启时做了什么?代码如下。
更新
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代码。运行此版本后,只剩下一个问题,那就是推土机在重启后通过现场后出现的问题。
NB:当我没有调用recycleEasyEnemy时,它就像第一次运行一样正常。但我必须重用easyEnemy!每次重启!不是吗?
解决了:解决了新的相机高度/宽度问题。
我差不多完成了。我需要专家关注这段代码。为了简化帖子,我只是避免常见的代码块。 谢谢。 ;)
帖子也是here:
答案 0 :(得分:2)
您需要在回收时调用detachSelf(),或者您也可以将父设置为null,它将解决您的问题。 :)
答案 1 :(得分:1)
根据我的观点,当您使用onGameRestart()方法同时清除场景时,您的两个图层也会从场景中分离出来。
因此,下次当您的createEasyEnemy()和createBullDozer()方法在 0 和 1 索引元素上添加数据时。所以这次你的0和1索引元素是另一个实体而不是实体。因此,您必须首先附加您的实体,以便像第一次运行一样正常。
只是因为这样你的第一次跑步才是完美的,下次就会出问题。
答案 2 :(得分:0)
从onGameRestart()方法中删除detachChildren();