2011-01-31 1 views
1

Я написал пошаговую игру, позволяющую смешивать ИИ и человеческих игроков. Порядок, в котором каждый игрок делает свой ход, будет отличаться в каждом раунде. В настоящее время он работает по-настоящему не-Android-дружеской манере, проходя через AI в функции onCreate. Очевидно, я хочу изменить это, поэтому моя идея такова:Вызов (и возвращение из) действий в игровой теме

Из главного меню я хотел бы создать активность, которая устанавливает поток, на котором я буду запускать всю логику игры. Поток будет проходить через игроков, отображая результат их прохождения после каждого из них. Каждый AI-плеер обновит свою логику здесь. Тем не менее, для человека-игрока ему необходимо будет создать активность, поскольку игрок сможет изменять, просматривать и обновлять многие детали. Как я могу сделать это из потока и разрешить потоку продолжать обработку других игроков, как только человек закончит свою деятельность?

ответ

0

Ваш игровой логический поток должен содержать ссылку на Activity (возможно, будучи вложенным классом вашего класса, производного от Activity).

Когда ваша игровая логика должна что-либо делать с пользовательским интерфейсом, он должен использовать Activity.runOnUiThread() для этого. Сначала я предлагаю обновить состояние для всех игроков, а затем позвонить runOnUiThread() только один раз за игру.

Если вам нужно сделать startActivity() из runnable, который вы передадите runOnUiThread, это не будет проблемой. Вам понадобится синхронизация для передачи данных, собранных из потока пользовательского интерфейса (например, игрока, нажавшего кнопку, чтобы что-то изменить в игре) в игровой поток.

+0

@Rok: Я ищу хороший способ обработки AI-игрока для простой игры. Я работаю над собой и хотел бы знать, хорошо ли этот подход подходит вам? Что же касается AsyncTask, попробовали ли вы это использовать? –

0

Вы должны взглянуть на реализацию сервиса для логики игры. Служба похожа на активность без компонента пользовательского интерфейса. Тогда у вас могут быть потоки AI, а проигрыватель (через поток пользовательского интерфейса) взаимодействует с сервисом. Потоки AI и пользовательский интерфейс каждый также нуждаются в информации о состоянии игры, чтобы выполнять свои задания, поэтому службе необходимо будет поддерживать запросы состояния игры.

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