同時変更例外を回避しようとしています。エンティティHashMapをループして各エンティティをtick()します。 PlayerエンティティはWASD入力で画面を移動し、addNewEntity()
メソッドをテストするには、プレーヤーが右に移動するときにGameState.addNewEntity(new Explosion(true, this.x, this.y));
を呼び出します。いくつかの爆発がプレイヤーに表示され、その後エラーが発生します。 Player classはEntityを拡張するCreatureを拡張します。 ExplosionはEntityクラスを拡張します。同時変更例外を回避しようとしています
このコードは、私のGameStateクラスからです:
private static HashMap<Integer, Entity> entities = new HashMap<Integer, Entity>();
private static HashMap<Integer, Entity> newEntities = new HashMap<Integer, Entity>();
player = new Player(game, true, 100, 100);
entities.put(0, player);
マイダニ()メソッド:
public void tick() {
// add new elements from newEntities to entities, deleting from newEntities
for (Entry<Integer, Entity> entry : newEntities.entrySet()) {
entities.put(entities.size(), entry.getValue());
newEntities.remove(entry.getValue());
}
System.out.println(entities.size());
// tick the updated entities HashMap
for (Entry<Integer, Entity> entry : entities.entrySet()) {
entry.getValue().tick();
// remove dead entities
if (!entry.getValue().isAlive) {
entities.remove(entry.getKey());
}
}
}
私addNewEntity方法:
public static void addNewEntity(Entity e) {
// add a new element to newEntities.
newEntities.put(newEntities.size(), e);
}
レンダリング私の方法:
public void render(Graphics g) {
for (Entry<Integer, Entity> entry : entities.entrySet()) {
entry.getValue().render(g);
}
}
エンティティHashMapに追加するのではなく、newEntities HashMapを追加することで、同時変更例外を回避しようとしました。私のダニ法では、newEntitiesのHashMapをループし、存在しない各項目をエンティティに追加し、それぞれを順番に削除します。その後、エンティティHashMapをループします。
反復処理中にマップを変更する方法はありますか?
ありがとうございます。魅力のように働いた。 – Fabced