Почему код запускается после setScreen () в LIBGDX? - PullRequest
0 голосов
/ 03 октября 2019

У меня простой экран меню с четырьмя кнопками и слушателями событий на каждой из них. В этом слушателе я выполняю метод changeScreen(), который изменяет экран, вызывая setScreen(). Экраны меняются без проблем, но почему запускается код после changeScreen() в теле метода changed().

openFile.addListener(new ChangeListener() {
    @Override
    public void changed(ChangeEvent event, Actor actor) {
        parent.changeScreen(Hren.OPENFILE);
        System.out.println("Why do I see this text when I am in OPENFILE screen");
    }
 });

1 Ответ

1 голос
/ 03 октября 2019

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

В этом случае, когда changeScreen() возвращается, он выталкивается из стека, и выполнение продолжается до конца этого changed() метода. Неважно, что то, что вызвало его, больше не ставится в очередь для рисования на экране. Стек вызовов не знает и не заботится об этом.

...