-
Notifications
You must be signed in to change notification settings - Fork 0
Internet Match & Nearby Match
yokoe edited this page Sep 14, 2010
·
19 revisions
- インターネット経由、あるいは無線LAN/Bluetoothを使った近隣のユーザ同士で対戦するための機能を提供します。
- PANKIAを使ったインターネット対戦/ローカル対戦は下記のような流れで行われます。
- ダッシュボードを開く
- インターネット対戦あるいはローカル対戦用のルームをユーザが作る
- 他のユーザがその部屋に入室する
- メンバーが揃う
- ゲームが開始される
- 対戦する
- ゲーム終了
- ダッシュボードに戻る
- ゲーム側では対戦がインターネット対戦/ローカル対戦なのかを意識する必要はありません。
- 部屋の作成はダッシュボード上で行います。
- 部屋が作成されメンバーが揃いゲームが開始されるまで、ゲーム側で行う処理はありません。
- (void)startInternetMatch { //インターネットマッチの画面を開いた状態でダッシュボードを開きます。 [PankiaNet launchDashboardWithInternetMatchView]; }
- 部屋に人数が揃い対戦の準備ができるとgameSessionWillBegin:が呼ばれます。
- (void)gameSessionWillBegin:(PNGameSession*)gameSession { //このメソッドがよばれたら、対戦のためにゲームを初期化します。 }
- 対戦が開始される時にgameSessoinDidBegin:が呼ばれます。
- ここで引数で渡されるgameSessionは対戦中相手にパケットを送信したり、経過時間を取得するために使用するため、ゲーム側で保持しておきます。
- (void)gameSessionDidBegin:(PNGameSession*)gameSession { currentGameSession = [gameSession retain]; }
- -[PNGameSession timeFromGameBeginning]でゲーム開始からの経過秒数を取得することができます。
- ロード等の処理に時間がかかることが考えられるため、最初の10秒程度は待機時間として使用することをお勧めします。
- (void)updateGame { float elapsedTime = [currentGameSession timeFromGameBeginning]; NSLog(@"%f 秒経過", elapsedTime); [self performSelector:@selector(updateGame) withObject:nil afterDelay:1.0f]; // 1秒後にゲームを再び更新します。 }
- 対戦相手にデータを送信するには、-[PNGameSession sendData:toPeers:withDataMode:]を使用します。
- (void)sendPacketToOpponents { [currentGameSession sendData:@"test" toPeers:[currentGameSession peerList] withDataMode:kPNGameSessionUnreliable]; }
- データを受け取ったユーザ側ではgameSession:didReceiveData:from:が呼ばれます。
-(void)gameSession:(PNGameSession*)gameSession didReceiveData:(NSData*)data from:(PNPeer*)opponent { NSLog(@"%d",data); }