2012-06-14 4 views
3

나는이 주제에 대해 이미 몇몇 게시물을 알고 있지만 필요한 답변을 찾을 수 없으며 어디서부터 시작해야할지 모르겠다.iOS 5/6를위한 온라인 실시간 멀티 플레이 게임

플레이어가 인터넷을 통해 서로 함께 플레이 할 수있는 iPhone 용 온라인 멀티 플레이어 게임을 만들고 싶습니다. 예를 들어, 2 명이 경주하는 게임 인 경우, 2 명의 플레이어가 매치되어 연결되면 서로 실시간으로 차량을 제어 할 수 있습니다. 예 : 마리오 카트와 같습니다.

게임 키트는 블루투스 또는 동일한 Wi-Fi 네트워크를 통해서만 제공된다는 것을 알고 있습니다. 전 세계 각국에서 서로 대결을 할 수있는 인터넷 (Wi-Fi 전용)을 통해이 기능을 사용하고 싶습니다.

이미이 작업을 수행 할 수있는 프레임 워크가 있다는 것을 알고 있습니다. 하지만 비용이 많이 들고 연결 수에 의존합니다. 이 말을하는 자유롭고 저렴한 방법이 있습니까? 게임 키트에서 일치를 확인한 다음 연결을 설정하고 데이터를 보내는 것과 같이 다른 방법을 사용합니까? 아이폰에 게임을 호스팅하는 것처럼? 전용 서버를 갖는 것보다. 전용 서버를 만들 예산이나 지식 및 경험이 없습니다.

일치가 간단합니다. 30 레벨이 있고 동일한 레벨을 플레이하고 싶은 2 명의 플레이어가 매치됩니다.

모든 링크 나 책을 추천합니다. 네트워크 지식이 매우 부족하고 어디서부터 시작해야할지 모르겠습니다.

내가 읽고들은 기술적 인 경우에도 기술을 배우고하지만 난 내가 미리 시작을

감사를 할 수 있도록 적절한 자산 및 자원을 안전하게해야합니다 수 있습니다.

+0

을에서 필요로하는 문서를 찾을 수 있습니다 이것을 제공하십시오. 게임 센터에서 뭔가가 온라인 게임을 만드는 데 도움이되었다고 생각했는데 실수로 착각 할 수는 있었지만 –

+0

예, 게임 센터에 중매가 있습니다. –

+0

"게임 센터가있는 것"은 무엇을 의미합니까? 또한 경기가 끝난 후 iPhone간에 데이터를 보내는 것은 어떨까요? – plawres

답변

5

실제로 Game Kit API를 사용하여 찾고있는 것을 정확하게 할 수 있습니다. 기본적으로 GKMatchMakerViewController를 사용하여 일치 항목을 만듭니다. 일치 시키려면 GKMatchMakerViewController를 사용하여 다른 플레이어를 찾기 시작합니다. 다른 플레이어를 찾으면 GKMatchMakerViewControllerDelegate에 일치하는 항목이 있음을 알리고 GKMatch 객체를 전달합니다. 그런 다음 실제 데이터를 처리하기 위해 GKMatchDelegate 프로토콜을 구현하는 객체가 필요합니다. 전달 된 GKMatch의 델리게이트 객체로 대리 객체를 설정 한 다음 - match : didReceiveData : fromPlayer :와 같은 GKMatchDelegate 프로토콜의 메소드와 GKMatch의 메소드를 사용하여 데이터를 전송합니다.

그 설명을 돕기위한 몇 가지 예제 코드입니다. 이것은 단지 필수 요소입니다. 게임 플레이를 구현하고 오류 처리를해야합니다.

또한, 당신은 당신이 내가 GameKit 이미하지 않는 경우에 연결하는 중매 서버의 어떤 종류를 필요로한다고 가정 할 네 가지 링크

GKMatchMakerViewControllerGKMatchMakerViewControllerDelegateGKMatchGKMatchDelegate

- (void)match:(GKMatch *)match didReceiveData:(NSData *)data fromPlayer:(NSString *)playerID{ 
    if(matchStarted){ 
     Packet *msg = (Packet *)[data bytes]; 
     //do whatever you want with the data received from other people 
    } 
} 

-(void)sendPosition{ 
    //call this to update the other players devices (should be self explanatory) 
    NSError *error; 
    Packet msg; 
    //Here the msg object is actually a typedefed struct name Packet. I use this to send and receive data 
    NSData *packet = [NSData dataWithBytes:&msg length:sizeof(msg)]; 
    [myMatch sendDataToAllPlayers: packet withDataMode: GKMatchSendDataUnreliable error:&error]; 
    if (error != nil) 
    { 
     // handle the error 
    } 
} 

#pragma mark MatchSetup 

- (void)matchmakerViewController:(GKMatchmakerViewController *)viewController didFindMatch:(GKMatch *)match{ 
    [self dismissModalViewControllerAnimated:YES]; 
    self.myMatch = match; // Use a retaining property to retain the match. 
    self.myMatch.delegate = self; 
    if (!matchStarted) 
    { 
     // Insert application-specific code to begin the match. 
    } 
} 
+0

+1입니다. 실시간 멀티 플레이를 위해 데이터를 전송하는 "우수 사례"가 있습니까? (얼마나 자주, 매끄럽게하는 방법 등?). 감사! –

+0

나는 정직하게 이것에 약간의 경험을 가지고있다. 그래서 나는 소금물로 채취해야한다고 말하고있다. 그러나 기본적으로 게임에서 잘 작동하는 빈도로 데이터를 보내야합니다 (다를 수 있음). 패킷을 보내는 속도는 패킷을받는 속도로 반영됩니다. 애니메이션이 계속 실행 중일 경우 (애니메이션 스프라이트와 그렇지 않은 경우), didReceiveData 메소드와 별도로 애니메이션을 적용하고 해당 메소드를 사용하여 애니메이션이 매끄러운 지 확인하는 데 필요한 스프라이트 위치를 업데이트하십시오. –

0

당신이 찾고있는 것은 존재할 수있는 GameKit "호스트 매치"래퍼입니다. Apple이 이러한 유형의 게임을 호스팅하지 않는다는 점에주의하십시오. 그래서, 당신은 웹 호스트가 필요하고, 그것들은 일반적으로 무료가 아닙니다. 아마존의 AWS는 마이크로 인스턴스에 대해서는 무료이지만, 규모에 따라 동기 재생을 충분히 할 수 있습니다.

나는 당신이 그것을 가져 왔을 때 잠재적 인 GameKit 랩퍼에 대해 더 많이 알고 싶습니다. 당신은 당신이 발견 한 것에 대해 논평을 할 수 있습니까? 당신은 그들이 비싸고 연결에 한계가 있다고 언급했습니다.

PS -이 프로젝트에 완벽하게 일치처럼 소리 (16 명) 선수

1

에 당신은 실시간 피어 - 투 - 피어 네트워킹 서비스 PubNub을 확인해야까지 애플의 제한이다.

겸손한 프로그래밍 지식으로도 구현이 매우 쉬운 PubNub를 발견했습니다. 가장 일반적인 언어에 SDK가 있기 때문에 다른 플랫폼을 통합하는 것도 쉽습니다. 내 iOS 기반 앱의 점수 판으로 사용되는 PHP 기반 웹 페이지가있었습니다.

+0

PubNub는 월 15 달러 이상입니다. PubNub를 사용하는 방법에 대한 링크를 제공 할 수 있습니까? 멀티 플레이어 게이밍을 위해 PubNub와 함께 수신 메시지를 보내려면 특수 SDK를 사용해야한다고 생각하십니까? – plawres

+0

주위를 놀고 싶다면 무료 개발자 등급이 있습니다. 15 달러가 예산을 초과하면 항상 자신 만의 예산을 책정 할 수 있지만, 맥주와 샌드위치에 드는 비용은 더 많이들 것입니다. 위의 링크를 클릭하고 "Developer"를 누르면 iOS, PHP 등의 예제가 나타납니다. 좋은 대답은 –

관련 문제