2011-12-22 1 views
2

저는 (이미 앱 스토어에서 MotAMot이라고 부르는) 애플리케이션을 만들고 있습니다 : boggle, 무료 앱.GameKit : 누가 마스터입니까?

이 게임에서는 독립 실행 형, 동일한 iDevice를 사용하는 멀티 플레이어 및 2 명의 플레이어가 동시에 동일한 게임 보드를 사용하지만 각자 자신의 iDevices를 사용하는 다중 재생 모드를 제안합니다.

저는 GKPeerPickerController 인스턴스를 사용하여 2 개의 장치 간의 연결을 관리하고 있습니다.

내 유일한 관심사는 누가 iPhone이 서버 역할을 담당하고 누가 누가 클라이언트인지 결정할 수 없다는 것입니다. 플레이어가 다른 플레이어에게 초대장을 보내면이 플레이어가 서버가 될 것이라고 결정할 수 있습니다.

예를 들어, 플레이어 1이 플레이어 2에게 게임에 참여하도록 초청했다고 가정 해 보겠습니다. 그러나 동시에 (또는 불과 몇 초 후) 플레이어 2는 자신의 기기에 표시된 초대 팝업을 받기 전에 플레이어 1을 초대합니다. 내 질문 : 플레이어 1이 먼저 플레이어 2를 초대했는지 (또는 그 반대)이라고 확신 할 수 있습니까? 물론 GKPeerPickerControllerDelegate 프로토콜을 구현 중이기 때문에 콜백이 있습니다. 그러나 은 누가 실제로 연결을 시작했는지 상관없이 두 장치에서 동일한 메시지를받는 것으로 보입니다.

// New connection 
- (void)peerPickerController:(GKPeerPickerController *)picker 
      didConnectPeer:(NSString *)peer 
       toSession:(GKSession *)session 
{ 
    // Set the session 
    [self setCurrentSession:session]; 

    // I'm implementing the GKSessionDelegate protocol 
    [session setDelegate:self]; 

// I'll handle any received data from my enemy 
    [session setDataReceiveHandler:self withContext:nil]; 

// I'm cleaning the room 
    [myPicker setDelegate:nil]; 
    [myPicker dismiss]; 
    [myPicker autorelease]; 
    myPicker = nil; 
} 


// A peer changed its state 
- (void)session:(GKSession *)session peer:(NSString *)peer didChangeState: (GKPeerConnectionState)state 
{ 
    switch (state) 
    { 
     case GKPeerStateConnected: 
      [self peerConnected:peer]; 
      break; 
     case GKPeerStateDisconnected: 
      // Libération de la session 
      [currentSession release]; 
      currentSession = nil;    
      break; 
     case GKPeerStateAvailable: 
      break; 
     case GKPeerStateConnecting: 
      break; 
     case GKPeerStateUnavailable: 
      break; 
    } 
} 

사람이에 어떤 생각을 가지고시겠습니까?

답변

2

구식 방식으로 해결할 수없는 이유는 무엇입니까? Civilization IV는 예를 들어 서버 룸 화면에 넣습니다.이 경우 클라이언트를 기다리는 서버이며 새로운 연결을 수락하지 않는 것이 좋습니다.

나는 그와 비슷한 것을 할 것입니다. this person (약간 관련이 있음)이 밝혀졌고 내 이해에서 비슷한 방식으로 해결되었습니다.

+1

CIV IV 참조 용 소품! –

+0

귀하의 회신에 많은 감사드립니다. 나는 그것을 이렇게했다. 그리고 그것은 잘 작동한다. 다시 한번 감사드립니다. – Roccapina