我正在 LibGDX 中开发一个游戏,并且我有一个名为 TILE_ID 的静态 int,每次创建图 block 时都会将其分配给每个图 block ,如下所示:
{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!
我不明白为什么会发生这种情况。如果我连接第三个客户端等,则最大图 block 始终为 152。
tileid 唯一增加的地方是 Level.class 内部,它对于每个玩家来说都是本地的(不通过网络发送)。
有人可以帮我解决这个问题吗?
最佳答案
在新流程实例中增加它们之前,您应该设置 Level.TILE_ID = 0
- 问题是您正在使用已设置为值的 TILE_ID
启动新流程76
因此新进程正在增加变量设置
76 + 76 = 152
它始终是152
,因为如果您从第二个开始,您就会从第一个客户开始关注新客户
152 + 76 = 228
等等
关于java - static int 对于不同的进程是不一样的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38348004/