我目前正在尝试保存特殊Actors
文件,以便在加载旧地图时再次将它们放在地图上。因此,我想将它们放入 aHashMap<String, ArrayList<Monster>> monsterAtMap
并从那里删除它们Stages
。所以我正在尝试这个:
private void saveMonsters() {
if (this.screen.figureStage.getActors().size == 0)
return;
ArrayList<Monster> monsters = new ArrayList<Monster>();
for (Actor a : this.screen.figureStage.getActors()) {
a.remove();
}
Gdx.app.log("Figurstage size", ""+ this.screen.figureStage.getActors().size);
this.monsterAtMap.put(this.currentMap.name, monsters);
}
作为开始。但我注意到它并没有全部删除。它确实只删除了 10 个。我确实size
在删除之前和之后记录了它。删除后是当前的 21(20 个怪物和 1 个字符)size
是 11。我也添加了这个this.screen.figureStage.getRoot().removeActor(a);
,但这并没有改变任何东西。
有什么想法吗?
[编辑] 我写了一个解决方法,所以我的想法是可行的,但应该可行的一般想法是不可能的,因为无论如何.remove()
并不总是删除Actor
?!解决方法看起来像这样:
private void saveMonsters() {
this.chara = this.screen.character;
if (this.screen.figureStage.getActors().size == 0)
return;
ArrayList<Monster> monsters = new ArrayList<Monster>();
for (Actor a : this.screen.figureStage.getActors()) {
if (a.getClass() == Monster.class)
monsters.add((Monster) a);
}
this.screen.figureStage.clear();
this.screen.figureStage.addActor(chara);
this.monsterAtMap.put(this.currentMap.name, monsters);
}
.clear()
确实工作正确。