Возвращение в главное меню в игре openGL-ES - закрытие / скрытие текущей активности - PullRequest
0 голосов
/ 23 ноября 2011

Теперь у меня есть действие MainMenu с файлом XML для его макета. Нажатием кнопки Intent приводит пользователя к активности в игре, которая имеет GLSurfaceView.

Я использую свой класс «Игра» для управления всеми игровыми объектами, жизнями, сбросами и т. Д. ... Когда срок жизни достигает 0, я хочу вызвать onGameOver (), который должен вернуть вас к действию MainMenu. Как мне это сделать?

Я попытался сделать статический вызов на свой класс активности, чтобы либо позвонить:

moveTaskToBack(true);
startActivity(intentToMainMenu);

Я просто не представляю, как я могу вернуться в главное меню. Также я считаю, что должен уничтожить активность игры, поскольку контекст OpenGL будет утерян, если я переключу действия. Так как мне это сделать?

Ответы [ 2 ]

1 голос
/ 24 ноября 2011

Вы могли бы поступить так, как написал Фрэнк, но в вашем конкретном случае вы, вероятно, не хотите завершать игровое действие (игрок, вероятно, снова будет играть). Никакой контекст не будет потерян. Если вы закончите свою игровую активность, запуск новой каждый раз будет медленным. Из-за этого лучше начинать такие действия:

Intent i = new Intent(getApplicationContext(), YourActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(i);

Флаг переупорядочения на фронт гарантирует, что у вас нет нескольких экземпляров одного и того же действия, потому что он не запускает новое действие, если оно уже существует. Поэтому, когда у игрока кончается жизнь, вы просто запускаете MainMenu, как в примере выше.

PS: Вы не можете закончить действия статически.

В свете вашего комментария, вот обновление:

Хотя, возможно, есть лучшие решения, вот решение, которое я использую: поскольку вы создаете игру, у вас, вероятно, есть отдельный поток, который рисует материал и проверяет, закончилась ли игра. Зарегистрируйте обработчик для потока рендеринга, который существует в потоке пользовательского интерфейса в вашей деятельности. После этого вы сможете отправить сообщение обработчику в классе Activity, когда игра должна закончиться. На приемном конце вы просто делаете код, опубликованный в моем ответе, поскольку вы не будете использовать статический метод.

Если вы не знакомы с обработчиками: http://saigeethamn.blogspot.com/2010/04/threads-and-handlers-android-developer.html

0 голосов
/ 23 ноября 2011

Вы можете назвать finish() в своей игровой активности.Это вернет вас к вашей домашней деятельности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...