2009-06-24 4 views
2

GameKit 프레임 워크를 사용하여 멀티 플레이어 게임을 만들었습니다. 2 개의 iPhone/iPod이 블루투스를 통해 서로 연결되어 재생 될 수 있습니다.GameKit으로 iPhone 블루투스 클라이언트에서 호스트에게 알리는 방법

나는 어떤 장치를 먼저 재생할 것인지를 선택하는 방법을 생각하고 있습니다. 논리적 인 해결책은 연결 호스트를 선택하는 것입니다. GKSession에 서버와 클라이언트가 있습니까? 그들은 모두 동급입니까? 내가 필요한 것을 얻기 위해 어느 길을 택해야합니까?

답변

6

기본적으로 원하는대로 세션을 구성해야합니다. 애플 문서에서

:

세션은 세션이 초기화 인 경우 설정 세션 모드에 따라 네트워크에있는 다른 동료를 발견 할 수 있습니다. 응용 프로그램은 서버를 세션으로 구성 할 수 있습니다. 네트워크에 서비스 유형을 알리는 ; 광고 서버를 검색하는 클라이언트; 또는 피어 ( )는 서버처럼 광고하고 클라이언트처럼 을 동시에 검색합니다. GKSessionModeServer 또는 GKSessionModePeer 중 하나의 세션 모드 : 나 displayName : sessionMode

서버로 작동하는 응용 프로그램의 사본은 initWithSessionID를 호출 하여 세션을 초기화합니다. 응용 프로그램이 세션을 구성한 후에 은 세션의 isAvailable 속성을 YES로 설정하여 서비스를 알립니다. GKSessionModeClient 또는 GKSessionModePeer 중 하나의 세션 모드 : 나 displayName : sessionMode

클라이언트로 작동하는 응용 프로그램의 사본은 initWithSessionID를 호출 하여 세션을 초기화합니다. 세션을 구성한 후에 응용 프로그램은 속성을 YES로 설정하여 으로 광고 서버 네트워크를 검색합니다. 세션이 GKSessionModePeer 세션 모드로 구성된 인 경우 위에 설명 된대로 을 서버로 알립니다.

따라서 GKSessionModePeer를 사용하여 세션을 초기화하면 피어 (서버와 클라이언트로 작동)가 생깁니다. 서버를 클라이언트와 구별하려면 GKSessionModeServer로 초기화하십시오.

친절하게 제공합니다.

+0

하지만 하나의 응용 프로그램이므로 내 코드에서 서버 또는 클라이언트를 결정해야합니다. 그래도 작동하지 않습니다. 하나의 인스턴스를 서버로, 하나를 클라이언트로해야합니다. 다른 플레이어가 먼저 재생을 시작할 플레이어를 선택하십시오. – Dimitris

+4

이 경우에는 임의로 또는 우연히 (예 : 토스를 cossing하여) 어떤 피어가 서버가 될지 결정해야합니다. 나머지는 고객이 될 것입니다. 실제 예를 보려면 Apple 샘플 코드 GKTank를 참조하십시오. GKTank 소스 코드에서 : // cointoss 상태를 입력하여 멀티 플레이어 게임을 시작하여 누가 서버/클라이언트인지 확인합니다. self.gameState = kStateMultiplayerCointoss; 코드는 동전 던지기 방법을 설명하고 결과에 따라 피어 중 하나가 클라이언트 역할을하고 다른 하나는 서버 역할을합니다. 팁을 주신 덕분에 –

+0

! 나는 이미 각 장치가 굴러서 다른 장치와 롤을 비교하는 "랜덤 롤"방법을 구현했습니다 ... 작동하지만 분명히 GK 탱크를 살펴볼 것입니다. – Dimitris

관련 문제