Игра Libgdx, почему не отображается эта таблица?

#java #android #libgdx

#java #Android #libgdx

Вопрос:

Итак, я разрабатываю игру для Android / настольных компьютеров с libgdx. В последнее время я добился большого прогресса, но одна проблема остается.

У меня есть блок if / else, который проверяет, есть ли у пользователя имя, сохраненное в общих настройках. Если таковой нет, появится окно libgdx с вводом текста и кнопкой. Как только нажимается кнопка отправки, информация об игроках отправляется на сервер, сервер отправляет обратно список рекордов, и для их отображения создается таблица. Проблема в том, что на данный момент я не вижу свою таблицу. Строки отладки отрисованы, и я на 100% уверен, что данные возвращаются чистыми, поскольку я могу распечатать все это.

Однако, если у пользователя действительно есть имя в общих настройках и блок if / else переходит к else без появления окна ввода, та же самая функция buildHighScores() работает отлично.

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

…инициализируйте все….

     // click listener for input window button
    btnSubmitName.addListener(new ClickListener() {         
        @Override
        public void clicked(
                com.badlogic.gdx.scenes.scene2d.InputEvent event, float x,
                float y) {
            super.clicked(event, x, y);
            stage.addAction(Actions.sequence(Actions.fadeOut(1), Actions.run(new Runnable() {
                @Override
                public void run() {
                    try {
                        // check database if name is taken
                        if(netcode.IsNameTaken(txtVal) == false) {
                            prefs.putString("name", txtVal);
                            prefs.flush();
                            System.out.println("thnx "   txtVal   " m8");

                            /////////////////////////////////////////
                            // doesn't display table, only debug lines
                            /////////////////////////////////////////
                            buildHighScores();

                            inputOK = true;
                        }
                        else System.out.println("name is taken");
                    } catch (UnknownHostException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            })));
        }
    });

    if(prefs.getString("name", null) == null)
    {
        System.out.println("ok...");
        try {
            netcode.setState(0);
        } catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println("Adding Input Window...");

        stage.addActor(window);

    }
    else
    {
        System.out.println("Name not null...");

        //////////////////////////
        // displays table perfectly
        //////////////////////////
        buildHighScores();  
    }
  

…stage.действие и stage.ничья…

     public void buildHighScores() {
    playerdata.setPlayerName(prefs.getString("name"));
    System.out.println("hey "   playerdata.getPlayerName());

    highScoreString = prefs.getString("highscore");
    String decodedString = Base64Coder.decodeString(highScoreString);
    System.out.println(decodedString);
    playerdata.setHighScore(Integer.parseInt(decodedString));

    try {
        netcode.setState(1);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    // connect to server and update play
    try {
        netcode.serverConnect(playerdata);
    } catch (ConnectException e) {
        System.out.println("socket exception brah");
        //gsm.setState(0);
        e.printStackTrace();
        //stage.addActor(errorWindow);
    } catch (IOException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }

    // get high score list from server
    HighScoreList = netcode.GetHighScores();

    // not necessary
    for(int i = 0 ; i < HighScoreList.size() ; i  ) {
        String tmp = new String(i 1   " "   HighScoreList.get(i).getPlayerName()   " "   HighScoreList.get(i).getHighScore());
        HighScoresList.add(tmp);
        //System.out.println(tmp);
    }

    // build scoresTable with the high score list we got from server
    scoresTable.setBounds(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    for (int i = 0 ; i < HighScoresList.size() ; i  ){
        scoresTable.add(new Label("" (i 1), labelStyle)).left();
        scoresTable.add().width(Gdx.graphics.getWidth()/6);
        scoresTable.add(new Label(HighScoreList.get(i).getPlayerName(), labelStyle)).left();
        scoresTable.add().width(Gdx.graphics.getWidth()/6);
        scoresTable.add(new Label("" HighScoreList.get(i).getHighScore(), labelStyle)).left();
        scoresTable.row();
        //System.out.println(i);
    }
    scoresTable.debug();

    // add scoresTable to a scrollpane
    scrollpane = new ScrollPane(scoresTable);

    // create table to display high scores
    table.setBounds(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    table.add(label);
    table.row();
    table.add(textfield).width(Gdx.graphics.getWidth()/2);
    table.row();
    table.add(scrollpane).fill().height(Gdx.graphics.getHeight()/2);
    table.row();
    table.add(button2);
    table.debug();

    stage.clear();
    stage.addActor(table);
}
  

Комментарии:

1. в условии if вам нужно сбросить текущий фрейм / действие.. чтобы сохраненные изменения вступили в силу

2. Является ли экземпляр Preferences, который вы используете, синглтоном? (Вы убедитесь, что существует только один ее экземпляр) потому что я столкнулся с ошибкой создания нескольких копий, а затем промывка вообще не сработала. Кроме того, вы уверены, что таблица инициализирована должным образом? (Я не использовал таблицу, я создал свой собственный просмотр списка, но это была не таблица)