Как указать беспроводную связь или Bluetooth в GameKit при использовании собственного пользовательского интерфейса

Я решил реализовать свой собственный интерфейс для подключения двух устройств, на которых запущена моя игра, вместо использования GKPeerPickerController. На самом деле это работает довольно хорошо. Но я только что понял, что при создании GKSession я фактически не указываю, должно ли соединение быть беспроводным или Bluetooth. В моем интерфейсе есть опция, позволяющая пользователю указывать, какой метод подключения он хотел бы использовать. Как мне сообщить GKSession, хочу ли я, чтобы он подключался через Bluetooth или по беспроводной связи?

Я думаю, что в настоящее время происходит то, что по умолчанию используется беспроводная связь, если беспроводная связь включена, в противном случае используется Bluetooth. Но я бы хотел, чтобы пользователь указывал, какой метод подключения, возможно ли это?

Спасибо донна


person DonnaLea    schedule 26.03.2010    source источник
comment
Я почти уверен, что Flight Control делает это. При настройке многопользовательской игры вы можете выбирать между Wi-Fi и Bluetooth, и все это в пользовательском интерфейсе.   -  person Marco Mustapic    schedule 06.09.2010
comment
Это то, что я пытался достичь в то время, настраиваемый интерфейс для пользователя, потому что я видел, как это делает Flight Control. Но не похоже, что я могу сказать GKSession, хочу ли я использовать Bluetooth или беспроводную связь, так что кто знает, что действительно делает Flight Control за кулисами.   -  person DonnaLea    schedule 07.09.2010
comment
Вот хороший пример кода: mobileorchard.com/tutorial-networking-and- bonjour-on-iphone Книга Apress тоже великолепна.   -  person vesselhead    schedule 23.08.2011


Ответы (2)


Насколько я знаю, самому сделать это нельзя. Для этого предназначен GKPeerPickerController. По умолчанию соединение устанавливается через BlueTooth, но вы также можете добавить вторую маску, чтобы пользователь мог выбрать свой протокол. По сути, я установил маску, позволяющую пользователю выбирать либо Bluetooth, либо «онлайн» (Wi-Fi):

_picker.connectionTypesMask = GKPeerPickerConnectionTypeNearby|GKPeerPickerConnectionTypeOnline;

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

person typeoneerror    schedule 27.06.2010

Чтобы сделать выбор, вам понадобится интерфейс, который спрашивает пользователя, хотят ли они использовать сеть или Bluetooth. В последнем случае он может перейти к контроллеру peerpickercontroller или сам реализовать вызовы GK. В первом случае вам нужно сбросить GK и закодировать его вручную.

Это довольно сложная тема, включающая настройку потока Bonjour и прослушивание объектов с обеих сторон. Он работает полностью вне GameKit, который поддерживает только Bluetooth.

Есть очень хорошая глава о том, как реализовать сетевые протоколы в Apress «More iPhone 3 Development - Chapter 9. Это очень хорошая книга, и она того стоит, если вы пытаетесь это сделать. Он очень хорошо объясняет все проблемы и проводит вас через функциональный пример игры.

person fogelbaby    schedule 22.09.2010