如何将 Game Center 或 GameKit 框架与 Sprite Kit Xcode 模板一起使用?在 Sprite 套件中,它使用场景;但通常要查看排行榜,例如您需要“presentModalViewController”,但这在 SKView 中是不可能的。
以及如何在 iOS 6 中验证播放器和所有其他有趣的东西。
提前致谢!
如何将 Game Center 或 GameKit 框架与 Sprite Kit Xcode 模板一起使用?在 Sprite 套件中,它使用场景;但通常要查看排行榜,例如您需要“presentModalViewController”,但这在 SKView 中是不可能的。
以及如何在 iOS 6 中验证播放器和所有其他有趣的东西。
提前致谢!
您可以通过使用此代码访问根视图控制器来使用“presentModalViewController”
UIViewController *vc = self.view.window.rootViewController;
[vc presentViewController: gameCenterController animated: YES completion:nil];
现在您可以在任何地方访问您的 ModelViewController,包括 SKScenes。我在我的最新游戏中做到了,而且效果很好
此外,我建议您使用单独的对象来控制游戏中心,如排行榜和成就,以便您可以在下一个游戏中重复使用它。
这是一个更新的认证本地播放器,但 Ravindra 的代码也可以工作。
- (void) authenticateLocalPlayer
{
GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
localPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error){
if (viewController != nil)
{
//showAuthenticationDialogWhenReasonable: is an example method name. Create your own method that displays an authentication view when appropriate for your app.
//[self showAuthenticationDialogWhenReasonable: viewController];
}
else if (localPlayer.isAuthenticated)
{
//authenticatedPlayer: is an example method name. Create your own method that is called after the loacal player is authenticated.
//[self authenticatedPlayer: localPlayer];
}
else
{
//[self disableGameCenter];
}
};
}
斯威夫特 2.0
func authenticateLocalPlayer() {
let localPlayer = GKLocalPlayer.localPlayer()
localPlayer.authenticateHandler = { (viewController, error ) -> Void in
if (viewController != nil) {
let vc:UIViewController = self.view!.window!.rootViewController!
vc.presentViewController(viewController!, animated: true, completion:nil)
} else {
print ("Authentication is \(GKLocalPlayer.localPlayer().authenticated) ")
GlobalData.loggedIntoGC = true
// do something based on the player being logged in.
全球数据 Swift 文件:
static var loggedIntoGC:Bool = false
启用 Game Center 的场景中的调用方法:即 HUD 或 GameScene
override func didMoveToView(view: SKView)`
authenticateLocalPlayer()
你可以像这样进行身份验证
[[GKLocalPlayer localPlayer] authenticateWithCompletionHandler:^(NSError *error) {
if (error == nil)
{
static_setEnable( true );
NSLog(@" Authenticate local player complete");
}
else
{
static_setEnable( false );
NSLog(@"Authenticate local player Error: %@", [error description]);
}
}];
}