0

我一直在尝试在我的 Sprite Kit 游戏中实现 Game Center,但每次我尝试展示排行榜时......

-(void)showLeaderboard:(UIViewController*)gcvc {
    GKGameCenterViewController *leaderboardController = [[GKGameCenterViewController alloc] init];
    if (leaderboardController != NULL)
    {
        leaderboardController.leaderboardIdentifier = @"Game_Leaderboard";
        leaderboardController.viewState = GKGameCenterViewControllerStateLeaderboards;
        leaderboardController.gameCenterDelegate = self;
        UIViewController *vc = self.view.window.rootViewController;
        [vc presentViewController: leaderboardController animated: YES completion:nil];
    }
}

游戏在启动时崩溃并出现以下错误:

[UIView setShowsDrawCount:]:无法识别的选择器发送到实例 0x178169e40 (lldb)

我查找了相关问题,所有问题都建议将 IB 中的 View 类更改为 SKView 类,但没有运气。异常断点停在以下行:

SKView *spriteView = (SKView *)self.view;
spriteView.showsDrawCount = YES;

并且视图显然是SKView类型,但它仍然说spriteView是UIView类型。我不确定这是否重要,因为游戏的主视图控制器是 UIViewController 的子类,这是呈现游戏中心排行榜所需要的,所以我不知道如何修复这个错误。

4

2 回答 2

0

经过大量调整后,显然代码存在一些问题。UIViewController *vc = self.view.window.rootViewController;不需要,因为我已经将视图控制器作为参数传递了,而不是遵循 Apple 的代码来创建 SKView,我只是连接了一个 IBOutlet 并摆脱了SKView *spriteView = (SKView *)self.view;我什至从未想过要更改 viewDidLoad 方法所以谢谢大家!

于 2014-05-29T17:47:01.783 回答
0

对于它的价值,我通常从主 UIViewController 获取 SKView ,如下所示:

/// Returns the Director's own view, but as a SKView *.
@property (weak, readonly) SKView * skview;

// ...

- (SKView *) skview {
  return (SKView *)self.view;
}
于 2014-05-30T15:17:59.127 回答