【发布时间】:2017-10-06 18:38:27
【问题描述】:
我有以下问题:
我编写了一个具有多人游戏功能的 2D 游戏。现在我将其他玩家数据和游戏对象存储在两个 ArrayList 中(否则将存储世界)。有时网络线程发送无法应用的更新,因为游戏绘制了玩家/游戏对象 (java.util.ConcurrentModificationException)。因为这个绘图过程每秒发生大约 60 次(因为动画),所以问题经常出现(每 2 秒)。这是玩家ArrayList的代码:
绘制玩家:
for (Player p : oPlayer) {
if (p != null) {
int x = (int) ((width / 2) + (p.x - getPlayerX()) * BLOCK_SIZE);
int y = (int) ((height / 2) + (p.y - getPlayerY()) * BLOCK_SIZE);
g.drawImage(onlinePlayer, x, y, BLOCK_SIZE, BLOCK_SIZE, null);
FontMetrics fm = g.getFontMetrics();
g.setColor(Color.DARK_GRAY);
g.drawString(p.getName(), x + (BLOCK_SIZE / 2) - (fm.stringWidth(p.getName()) / 2), y - 5);
}
}
在 Network-Thread 中编辑信息:
case "ADP": //add Player
Game.oPlayer.add(new Player(message, id));
sendX();
sendY();
break;
case "SPX": // set X
for (Player p : Game.oPlayer) {
if (p.getId() == id) {
p.setX(Short.parseShort(message));
break;
}
}
break;
case "SPY": // set Y
for (Player p : Game.oPlayer) {
if (p.getId() == id) {
p.setY(Short.parseShort(message));
break;
}
}
break;
case "PDI": // remove Player
for (Player p : Game.oPlayer) {
if (p.getId() == id) {
Game.oPlayer.remove(p);
break;
}
}
break;
提前谢谢你:)
【问题讨论】:
标签: java networking arraylist multiplayer