我这里有两个精灵,easyEnemy & bullDozer。easyEnemy在每一个seconds.So中产卵,我使用的是时间处理器,因为.A推土机只在一个随机时间出现一次。
编辑:
我使用泛型池来重用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上方移动。:)
问题
当我重新开始游戏,只有推土机与缩放first.But我不是缩放bullDozer。推土机从现场经过后,敌人就来了。相机的高度和宽度也缩短了在设备内。这种行为与我在重新启动时执行的第一个run.What不一样吗?代码在下面。
更新:
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!每次重启!难到不是么?
解决了:解决了新相机的高度/宽度问题。
,我快完成了。我需要一个专家来研究这段代码。为了文章的简单性,我只是避免了常见的代码块。谢谢。;)
post也是这里
发布于 2013-05-02 07:17:15
您需要在回收过程中调用detachSelf(),或者您也可以将父程序设置为null,这将解决您的问题。:)
发布于 2013-05-01 15:53:52
按照我的观点,当您同时使用onGameRestart()方法清除场景时,您的两个层也会与场景分离。
因此,下一次当您的createEasyEnemy()和createBullDozer()方法在、和1索引元素上添加数据时。因此,这次您的0和1索引元素是另一个实体,而不是实体。因此,您必须首先附加您的实体,以获得所有的事情一样,你的第一次运行。
正因为如此,你的第一次跑步是完美的,下一次就有问题了。
发布于 2013-04-30 09:39:50
从onGameRestart()方法中删除detachChildren();
https://stackoverflow.com/questions/16296031
复制相似问题