3

このトピックに関する投稿がすでにいくつかあることは知っていますが、必要な答えが見つからず、どこから始めればよいのかわかりません。

プレイヤーがインターネットを介して一緒にプレイできるiPhone用のオンラインマルチプレイヤーゲームを作成したいと思います。たとえば、2人のプレーヤーが一致して接続されると、2人のプレーヤーがお互いにリアルタイムで車を制御できる2人のプレーヤーのレースゲームです。たとえば、マリオカートのように。

私はゲームキットがこのように機能することを知っていますが、Bluetoothまたは同じwifiネットワークを介してのみです。これは、世界中のプレイヤーが対戦できるインターネット(Wi-Fiのみ)を介して行われるようにしたいと思います。

これを行うためのフレームワークがすでにいくつかあることを私は知っています。ただし、コストがかかり、接続数によって異なります。これを行うための安価なまたはあえて言う、無料の方法はありますか?ゲームキットにマッチングを行わせてから、接続とデータの送信を別の方法で行うようにしますか?iPhoneにゲームをホストさせるのが好きですか?専用サーバーを持つのではなく。専用サーバーを作成するための予算も知識も経験もありません。

マッチングは簡単です。30のレベルがあり、同じレベルをプレイしたい2人のプレーヤーが一致します。

リンクや本の推奨事項は大歓迎です。私はネットワークの知識が非常に限られており、どこから始めればよいのかわかりません。

技術的なテクニックでも読んで学ぶことができますが、始めるには適切なリソースが必要です

前もって感謝します。

4

3 に答える 3

5

実際には、GameKitAPIを使用して探していることを正確に行うことができます。基本的に、GKMatchMakerViewControllerを使用して一致を作成します。一致させるには、GKMatchMakerViewControllerを使用して他のプレーヤーの検索を開始します。他のプレーヤーが見つかると、一致が見つかったことをGKMatchMakerViewControllerDelegateに通知し、GKMatchオブジェクトを渡します。次に、実際のデータを処理するためにGKMatchDelegateプロトコルを実装するオブジェクトが必要です。デリゲートオブジェクトを、渡されたGKMatchのデリゲートに設定してから、– match:didReceiveData:fromPlayer:などのGKMatchDelegateプロトコルのメソッドとGKMatchのメソッドを使用してデータを送信します。

その説明に役立つサンプルコードを次に示します。これは必要不可欠なものにすぎません。もちろん、ゲームプレイのものといくつかのエラー処理を実装する必要があります。

また、これらの4つのリンクで必要なドキュメントを見つけることができます

GKMatchMakerViewController GKMatchMakerViewControllerDelegate GKMatch GKMatchDelegate

- (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.
    }
}
于 2012-06-15T04:17:29.317 に答える
1

プロジェクトに完全に一致しているように聞こえるので、リアルタイムのピアツーピアネットワーキングサービスPubNubをチェックする必要があります。

プログラミングの知識があまりなくても、PubNubの実装は非常に簡単であることがわかりました。最も一般的な言語用のSDKがあるため、さまざまなプラットフォームの統合も簡単でした。iOSベースのアプリのスコアボードとして機能するPHPベースのWebページがありました。

于 2012-06-14T21:47:01.637 に答える
0

あなたが探しているのは、GameKitの「ホストされた一致」ラッパーです。これはおそらく存在します。注意点は、Appleはこれらのタイプの一致をホストしないということですが、あなた自身のサーバーはホストします。したがって、ウェブホストが必要になりますが、通常は無料ではありません。アマゾンのAWSはマイクロインスタンスに対して無料ですが、規模によっては、おそらく十分な同期プレイでトップになります。

あなたがそれを持ってきたので、私は潜在的なGameKitラッパーについて学ぶことにもっと興味があります。あなたが見つけたものについてコメントできますか、あなたはそれらが高価であり、接続に制限があると述べました。

PS-Appleの制限は最大16人です

于 2012-06-14T21:02:14.827 に答える