【发布时间】:2016-07-13 09:41:47
【问题描述】:
我正在 LibGDX 中开发一个游戏,我有一个名为 TILE_ID 的静态 int,每次创建图块时都会分配给每个图块,如下所示:
{loop in Level.class}
Tile t = null;
switch (material) {
case HOME: {
t = new Home(x, y);
break;
}
case WALL_IRON:
case WALL_BRICK: {
t = new Tile(x, y, material, type);
break;
}
}
if (t != null) {
if (t instanceof Home) {
this.home = t;
}
t.tileID = TILE_ID++;
tileArray.add(t);
}
{loop-end in Level.class}
所以当我开始一个新游戏时,第一个实例会说:
private final Listener clientListener = new Listener() {
@Override
public void connected(Connection connection) {
PacketEntity p = (PacketEntity) Packet.createPacket(
PacketEntity.class, Packet.TYPE.CONNECTED);
p.name = pTank.getName();
connection.sendTCP(p);
System.out.println("MAX TILES: " + Level.TILE_ID);
System.out.println("connected to server!");
}
输出是:
:desktop:run
new manager
disposed main menu!
Initializing local server...
Client connected! ID# 1
MAX TILES: 76
connected to server!
然后我运行第二个实例,连接到本地主机服务器,输出是:
:desktop:run
new manager
disposed main menu!
A server is already running on localhost. Trying to connect....
MAX TILES: 152
connected to server!
我不明白为什么会这样。如果我连接第三个客户端等等,最大图块总是 152。
tileid 增加的唯一位置是 Level.class 内部,每个玩家都是本地的(不通过网络发送)。
有人可以帮我解决这个问题吗?
【问题讨论】:
-
你试过调试代码吗?从(相当稀疏的)信息来看,如果启动第二个实例,“Level-Creation-Loop”可能会执行两次(
152 = 2 * 76)。 -
这有点令人困惑,因为所有大写字段名称通常仅用于
final静态字段。 -
谢谢。正确答案是 dpr。我的代码中有一个错误,即即使您连接到另一台服务器也会创建一个新的服务器实例。
标签: java libgdx desktop-application kryonet