2016-07-13 5 views
1

Я разрабатываю игру в 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! 

И тогда я выполните второй экземпляр, подключитесь к серверу localhost, а выход:

:desktop:run 
new manager 
disposed main menu! 
A server is already running on localhost. Trying to connect.... 
MAX TILES: 152 
connected to server! 

Я не понимаю, почему это происходит. Если я подключу третьего клиента и т. Д., Максимальные плитки всегда равны 152.

Единственное место, в котором растет плитка, находится внутри уровня Level.class, который является локальным для каждого игрока (не отправляется по сети).

Может ли кто-нибудь помочь мне с этим?

+1

Вы пытались отладить код? Из (довольно редкой) информации, приведенной, похоже, что «Level-Creation-Loop» может выполняться дважды ('152 = 2 * 76'), если запускается второй экземпляр. – dpr

+1

Это было немного странно, потому что все имена полей шапки обычно используются только для статических полей «final». – Tenfour04

+0

Спасибо. Правильный ответ был dpr. У меня была ошибка в коде, что новый экземпляр сервера будет создан, даже если вы подключаетесь к другому серверу. – Jh62

ответ

1

Вы должны установить Level.TILE_ID = 0 до увеличения их в новом экземпляре процесса - проблема заключается в том, что ваш начинает новый процесс с TILE_ID уже установками, как со значением 76 поэтому новый процесс увеличение настройки переменной

76 + 76 = 152 

это всегда 152, потому что вы смотрели новых клиентов из первого, если бы запустить его из второго было бы

152 + 76 = 228 

и так далее

+2

Если он сбросит TILE_ID на ноль, то почему ему нужно установить его как статическое свойство, я думаю, ему может понадобиться установить этот класс в клиентском совке не на сервере scoop –

+0

, это зависит от того, как он использует переменную внутри клиента app (возможно, ему нужен статический доступ, чтобы получить доступ к этому из внешнего класса) –

+0

Спасибо. Я попробую это сегодня вечером. Возможно, это потому, что я запускаю несколько мгновений из среды IDE. Я также пытаюсь запустить скомпилированный код, чтобы узнать, продолжает ли это происходить. – Jh62