我正在開發中LibGDX遊戲一樣,我有一個靜態INT名爲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內。
有人可以幫我解決這個問題嗎?
你有沒有試着調試代碼?從給出的(而稀疏的)信息,它看起來像「級別創世迴路」可能被執行兩次('152 = 2 * 76')如果第二個實例啓動。 – dpr
這是一個有點混亂跟隨,因爲全部大寫字段名稱通常僅用於'final'靜態字段。 – Tenfour04
謝謝。正確答案是dpr。我在,如果你連接到另一臺服務器新的服務器實例會甚至創造代碼中的錯誤。 – Jh62