Статический int не одинаков для разных процессов

Я разрабатываю игру в LibGDX, и у меня есть статический int с именем TILE_ID, который назначается каждой плитке каждый раз, когда плитка создается, например:

{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, который является локальным для каждого игрока (не отправляется по сети).

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


person Jh62    schedule 13.07.2016    source источник
comment
Пробовали отлаживать код? Из предоставленной (довольно скудной) информации видно, что цикл создания уровней может выполняться дважды (152 = 2 * 76), если запущен второй экземпляр.   -  person dpr    schedule 13.07.2016
comment
Это было немного запутанно, потому что все имена полей с заглавными буквами обычно используются только для final статических полей.   -  person Tenfour04    schedule 13.07.2016
comment
Спасибо. Правильный ответ был от dpr. У меня была ошибка в коде, из-за которой новый экземпляр сервера создавался, даже если вы подключались к другому серверу.   -  person Jh62    schedule 14.07.2016


Ответы (1)


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

    76 + 76 = 152

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

    152 + 76 = 228

и так далее

person m.antkowicz    schedule 13.07.2016
comment
Если он сбрасывает TILE_ID на ноль, то зачем ему устанавливать его как статическое свойство, я думаю, ему может понадобиться установить этот класс в клиентской статистике, а не в серверной статистике. - person Anas EL KORCHI; 13.07.2016
comment
это зависит от того, как он использует переменную внутри клиентского приложения (возможно, ему нужна статика для доступа к ней из внешнего класса) - person m.antkowicz; 13.07.2016
comment
Спасибо. Я попробую это сегодня вечером. Может быть, потому что я запускаю несколько моментов из IDE. Я также попробую запустить скомпилированный код, чтобы посмотреть, будет ли это продолжаться. - person Jh62; 14.07.2016