2013-06-18 2 views
0

Game Center를 사용하는 iOS 멀티 플레이어 게임을하고 있습니다.게임 센터의 데이터 전송 문제

사용자가 Game Center에 로그인하고 "지금 재생"을 누르면 GC가 4 명의 플레이어를 연결하고 게임이 시작됩니다. 문제는 일부 데이터가 손실되기 때문에 게임이 자주 멈추는 것입니다 (이것이 이유라고 생각합니다). 게임은 보통 잘 작동하지만 때로는 서버 (서버 중 일부는 서버)가 보낸 데이터가 손실되어 게임이 멈 춥니 다.

나는 데이터를 전송하기 위해이 기능을 사용 :

- (void)sendDataNSData *)data { 
    NSError *error; 

    BOOL success = [[GCHelper sharedInstance].match sendDataToAllPlayers:data withDataMode:GKMatchSendDataReliable errorerror]; 

    if (!success) { 

     //NSLog(@"Error sending init packet"); 
     [self matchEnded]; 

    } 
} 

문제는 matchend은 내가 그 데이터가 전송되지만 분실 생각 소위되지이다.

비슷한 문제가 있거나 해결 방법을 알고있는 사람이 있습니까?

+0

오류 매개 변수는 어떻게됩니까? – Mert

+0

@ 경고 - 오류가 없습니다. 경우에 따라 클라이언트는 데이터 패키지 경고를받지 못합니다. – CroiOS

+0

시뮬레이터 또는 ideide를 사용합니까? 게임 센터 API가 시뮬레이터에서 제대로 작동하지 않습니다. – Mert

답변

2

내 사용자는 게임 중에 실수로 일부 데이터가 손실 될 수도 있다고 불평합니다. 나는 test app이라고 썼고 GKMatchSendDataReliable은 정말로 신뢰할 만하지 않다는 것을 알아 냈습니다. 인터넷 연결이 약한 경우 (예 : EDGE) 게임 센터 API에서 오류가 발생하지 않고 일부 패킷이 정기적으로 손실됩니다.

신뢰할 수있는 전송을 위해 추가 전송 레이어를 추가하는 것이 유일한 옵션입니다.

이 목적을 위해 간단한 lib를 작성했습니다 : RoUTP. 각 수신 메시지에 대한 확인 응답이 수신 될 때까지 모든 전송 된 메시지를 저장하고 끊어진 시퀀스가 ​​발생할 경우 수신 된 메시지를 버퍼에 다시 보냅니다. 내 테스트 조합에서 "RoUTP + GKMatchSendDataUnreliable"은 "RoUTP + GKMatchSendDataReliable"보다 더 효과적입니다. 물론 순수 GKMatchSendDataReliable보다 신뢰성이 좋습니다.

관련 문제