2013-04-07 10 views
1

Я новичок в iOS (хотя у меня много опыта на C++), и я работаю в пошаговой карточной игре с использованием gamecenter. Вот улов. Игрок, который повернулся, это судья и ждет, пока все ДРУГИЕ игроки не сыграют карту до того, как очередь закончится. Есть ли способ сделать это в Game Center, поэтому все игроки решили, что делать одновременно, и как только все это сделали, судья будет уведомлен, примет решение и затем переняет приоритет следующему игроку? Например, скажем, мы начинаем свою очередь 1. Я задаю вопрос, @ «Какой твой любимый цвет?» всем игрокам, передающим им игру, которая имеет это как вопрос, и они не ответили на него. Затем вы отвечаете, @ «Зеленый», и наш друг Стив отвечает @ «Синий». Затем я решаю, что лучше, дайте одному из вас точку, а затем тот, кто я дал точку, станет новым судьей. Мой вопрос: как мне разрешить всем игрокам отвечать одновременно, а не последовательно. Я знаю, что в худшем случае я мог бы последовательно обходить игроков, пока он не вернется ко мне, а затем судите об этом, но это замедлит мою игру и сделает ее менее забавной. Есть ли способ сделать это одновременно?Игровой центр Одновременные повороты

+0

Если вы уведомляете игрока-судьи, как только любой игрок делает выбор, тогда код, выполняемый на стороне судей, должен легко узнать, получили ли они все ответы или нет. Правильно? – Fraggle

ответ

1

API iOS построен вокруг модели последовательных поворотов. В то время как обходной путь, о котором вы говорили, будет работать, нет никакого способа получить GC для выполнения реальных одновременных поворотов. Извините):

+0

В качестве дополнения к этому, начиная с iOS7, это возможно благодаря обмену - механизму, который позволяет игрокам, которые не являются текущим игроком, передавать данные другим игрокам и обновлять состояние соответствия. – Xono

1

Я согласен с NSSplendid в отношении API для игр с разворотом, требующих последовательных поворотов. Единственным по-настоящему одновременным методом будет использование совпадений в реальном времени от GKMatch, и на самом деле это не вариант для игр с более чем несколькими игроками.

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

Завершение поворота запускает уведомление о путях через Game Center и с использованием метода GKTurnBasedEventHandler handleTurnEventForMatch: didBecomeActive :, вы можете получить это в своем приложении. Когда судья задает вопрос, попросите пользователей отобразить это как часть игры, и их ответы хранятся локально до их хода. Как только он становится поворотным игроком, он получает уведомление, даже с приложением в фоновом режиме.

В методе он может проверить локально сохраненный ответ и немедленно завершить ход, если они ответили. Если они этого не сделали, отправьте поворот после завершения ответа. Это не поистине одновременное, но судья получает ответы, как только все откликнутся, без того, чтобы игрокам пришлось ждать, пока один игрок закончит, прежде чем они смогут ввести свои собственные ответы.

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

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