GameCenter対戦で、アプリのバージョンが違うプレーヤーがマッチしないようにした
GameCenterでの対戦ゲームを作ってるんですが、自分の仕様だとバージョンが違うプレーヤー間に有利不利が付いてしまう可能性があるので、同じバージョン同士の人しか当たらないようにしたいと考えました。
そこで、GKMatchRequestのplayerGroupを使ってみました。これはNSIntegerなんですが、0以外の値を設定すると、同じ32bit値を設定したプレーヤーとのみマッチングされるようになるそうです。
AppDelegate.mのapplicationDidFinishLaunching:に
NSString* version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; float verFlo = [version floatValue]; int verGroup = verFlo * 100; NSNumber * verGroupNum = [NSNumber numberWithInt:verGroup]; NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; [userDefaults setValue:verGroupNum forKey:@"VerGroup"];
こういう感じでNSUserDefaultsのVerGroupというkeyにバージョンを整数化したものを入れておいて、あとはマッチのリクエストを作る際に、
GKMatchRequest* request = [[[GKMatchRequest alloc] init] autorelease]; request.minPlayers = 2; request.maxPlayers = 2; NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; NSNumber *verGroupNum = [userDefaults objectForKey:@"VerGroup"]; request.playerGroup = [verGroupNum intValue];
このような形でplayerGroupに指定してやれば、この値が同じプレーヤーとしかマッチしませんでした。
playerGroupをバージョン情報に割くのはもったいない、と思ったら、上3ケタはバージョンに使う、みたいな感じでケタで分けるといいかもしれません。