работа с несколькими пользователями iOS Game Center в постоянной игре - PullRequest
5 голосов
/ 31 марта 2012

Я прочитал https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/GameKit_Guide/Achievements/Achievements.html#//apple_ref/doc/uid/TP40008304-CH7-SW13.

Я озадачен вопросом о поддержке нескольких пользователей игрового центра на одном устройстве.

В частности, я озадачен тем, как сделать это в игре, которая имеет общий прогресс, например, в приключенческой игре или игре в кроссворд.

То есть я думаю, что есть два вида игр. В одном вы начинаете игру, идете, пока не умрете, и тогда игра окончена. С такой игрой легко справиться в многопользовательской модели Game Center. Когда новый игрок Game Center зарегистрировался, я могу загрузить его статистику Game Center, а затем они смогут играть в игры, и я соответствующим образом скорректирую их достижения / оценки. Единственный особый случай: что произойдет, если игрок А игрового центра играет, игра переходит на задний план, а игрок Б игрового центра входит в систему, а затем игра выходит на передний план? В этом случае достаточно просто завершить игру и сказать: «Извините, вы переключили пользователей Game Center. Вам нужно запустить новую игру».

Но другой вид игры - это игра с общим прогрессом, который сохраняется, как правило, автоматически. Например, скажем, у меня есть игра-кроссворд со 100 головоломками. Скажем, игрок А завершил 8 головоломок и находится в середине завершения 9-й головоломки, а затем игрок Game Center переходит на игрока B. Предположим, игрок A уже получил достижение «Решенные 5 головоломок». Что должно произойти теперь, когда игрок B вошел в систему?

Один из подходов к этому «правильному» способу (который подразумевается в документе Apple выше) состоит в том, что игра должна сохранять полностью сохраненное состояние для каждого игрока Game Center. Поэтому, когда игрок B входит в систему, состояние игрока A должно автоматически сбрасываться в сторону, а головоломки должны очищаться, чтобы игрок B мог работать с ними с нуля. Даже тогда существует проблема того, что происходит, когда игрок А затем устанавливает игру на новое устройство. У новой установленной игры будет завершено ноль головоломок, но пользователь Game Center игрока A уже имеет достижение «Решено 5 головоломок». Так мы должны сбросить достижения игрока А? Должны ли мы каким-то образом автоматически заполнять ответы на головоломки, чтобы привести игру игрока А в соответствие с его достижениями?

Мне просто кажется, что модель Game Center не была настроена с учетом такого общего устойчивого прогресса. (И на самом деле, если игра использует свою собственную систему входа для управления состояниями нескольких игроков, мне кажется, что она становится даже более сложной для работы с несколькими Game Center игрокам, потому что должен быть способ сопоставить игроков Game Center с игроками входа в игру, и, насколько я вижу, в игре должен быть какой-то соответствующий интерфейс для этой работы.)

В любом случае, вот мое мнение о «версии бедняка» о том, как с этим бороться; то есть, как взять вашу обычную однопользовательскую игру с глобальным постоянным состоянием (опять же, как кроссворд) и заставить ее работать «достаточно хорошо» с Game Center:

(1) Игра не пытается "синхронизировать" игру с вашей статистикой Game Center. Например, если вы решите 9 головоломок на одном устройстве, а затем установите игру на втором устройстве и войдете в систему с тем же пользователем Game Center, в новой игре все равно будет решено ноль головоломок, даже если у вашего игрока Game Center все еще есть Достижение «Решено 5 головоломок».

(2) Если вы снова выполните 5 головоломок, ничего не изменится, поскольку вы уже заработали это достижение. Но затем, выполнив 25 головоломок (или любого другого уровня достижений), вы получите это новое достижение.

(3) Предположим, что вы (игрок A) выполнили 9 головоломок, а затем вы выходите из игрового центра, а кто-то еще (игрок B) входит на это же устройство.В этом случае мы загрузим достижения игрока B и предположим, что у игрока B в данный момент нет достижений в игре.В версии этого для богача, я думаю мы должны сбросить головоломки, чтобы соответствовать достижениям игрока B.Но в версии для бедняков мы просто немедленно (и молча) обновляем достижения игрока B, чтобы они соответствовали состоянию игры.Таким образом, игрок B сразу же получит достижение «Решил 5 головоломок» (даже если это «игрок A», который «заработал» его).

Суть версии этого бедняка была бы:

(a) Если два или более игроков входят в игровой центр и выходят из него на одном устройстве, тот, кто вошел в систему во время достижения, получит это достижение.Кроме того, во время входа в систему достижения игрока «догонят» состояние игры, если состояние будет выше.Таким образом, все игроки "прогрессируют вместе" - любое достижение одного игрока наследуется любым другим игроком, который вошел в систему.

(b) Если вы удаляете / переустанавливаете или устанавливаете на новое устройство, вы начинаете сне говоря уже о головоломках, но ваши достижения остаются на высшем уровне, в котором они находились, и как только вы начинаете превышать эти цифры, достижения увеличиваются, чтобы не отставать от вас.

Итак, в общем, мне кажется, чтолюбая игра, которая имеет глобальный постоянный прогресс (приключенческая игра, игра в кроссворд) столкнулась бы с этими проблемами с несколькими игроками Game Center.Мне кажется, что есть два пути: правильный путь и путь бедняка.Правильный путь кажется сложным.Например, приключенческая игра должна спросить пользователя что-то вроде: «Я вижу, вы только что вошли в систему с другим игроком Game Center B. Вы хотите продолжить свою игру и связать весь дальнейший прогресс с игроком B, или выполнитеВы хотите перезагрузить игру, чтобы игрок B мог начать с нуля? "И тогда нужно было бы подготовить сохранение полных состояний (инвентарь, карта и т. Д.) Для любого числа пользователей игрового центра.

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

Итак, мои вопросы:

(а) Является ли мой анализ этой ситуации правильным?

(б) Является ли решение бедного человека, которое я обрисовал в общих чертах, жизнеспособным?Это тот, который обычно используется?

1 Ответ

0 голосов
/ 02 декабря 2013

Я знаю, что это довольно старый вопрос, но у меня был тот же вопрос несколько дней назад. Я нашел хороший пост в блоге http://www.mindthecube.com/blog/2012/04/handling-game-center-with-ios-multitasking, посвященный точно такой же теме.

На самом деле это говорит о том, что «решение для бедного человека» является приемлемым решением, используемым во многих известных играх.

...