2017-02-22 13 views
0

В libgdx, screen.setScreen() не вызывается автоматически автоматически. Внутри переопределенного setScreen мне нужно сначала позвонить screen.dispose, а затем позвонить super.setScreen или позвонить позже? Я знаю, это может показаться дублирующим вопросом, но все же я хотел знать, потому что super.setScreen звонит screen.hide. Является ли звонок hide после dispose безопасным временем? Это плохая практика? Я делаю 3D-игру на основе this и this. Здесь я продолжаю GameName класс Game и пытается переопределить setScreen, чтобы вызвать dispose, если экран не равен null, а затем вызовите super.setScreen.Безопасно ли вызывать Screen.hide() после Screen.dispose() в LibGDX?

ответ

0

screen.dispose() никогда не вызывается LibGDX. Вы должны сделать это вручную самостоятельно, прежде чем отбрасывать ссылку на свой экран. Если вы не планируете повторно использовать экземпляр Screen, то screen.hide() звоните screen.dispose() - это идеальное место для этого.

screen.hide() никогда не вызывается в ответ на события Android.

Я не рекомендую переопределять game.setScreen(), чтобы избавиться от экранов, если вы точно не знаете, что вы никогда не захотите повторно использовать какие-либо экземпляры экрана. В большинстве простых игр вы хотите повторно использовать их, а не тратить время на разгрузку и перезагрузку активов.

0

Два типа одноразовых активов (SpriteBatch, Texture, Stage, ...), один используется на другом экране, а другой - для конкретного экрана.

  1. Общие активы должны быть удалены из метода игры dispose().

  2. Экран конкретных активов должен быть удален с помощью метода Screen, но экран dispose() никогда не вызывается, поэтому вам нужно явно его называть.

При изменении метода экрана называется, так что вы должны вызвать метод dispose() из hide() метода экрана hide().

+0

Но в Android hide вызывается, когда пользователь получает вызов или проигрывает фокус. Так что добавление утилиты внутри скрыть - плохая идея. – Anutrix

+0

@Anutrix, что вы думаете, что экран скрывает() метод вызова Android's hide(). Оба метода различны. – Aryan

+0

@ Анутрикс, нет, это не так. 'pause()' вызывается, когда игра теряет фокус, но не 'hide()'. – Tenfour04

Смежные вопросы