我按照以下方式组织游戏:
一个菜单(ViewController) - 在Storyboard中制作 - 我在其中向玩家中心验证玩家并提供一个按钮以进入排行榜(这非常有效)
制作SKScene的视图控制器,用于启动游戏(GameScene)
一款名为GameOverScene的SKscene,在游戏丢失时出现。
我希望GameOverScene上有一个按钮带我进入排行榜
这是我在GameOverScene中用来显示排行榜的代码:
-(void)showLeaderboardAndAchievements:(BOOL)shouldShowLeaderboard{
GKGameCenterViewController *gcViewController = [[GKGameCenterViewController alloc] init];
gcViewController.gameCenterDelegate = self;
if (shouldShowLeaderboard) {
gcViewController.viewState = GKGameCenterViewControllerStateLeaderboards;
gcViewController.leaderboardIdentifier = @"wurst.highscore";
}
else{
gcViewController.viewState = GKGameCenterViewControllerStateAchievements;
}
UIViewController *vc = self.view.window.rootViewController;
[vc presentViewController:gcViewController animated:YES completion:nil];
}
当触摸到相应的按钮并且没有任何反应时,我运行这段代码:我收到日志错误或警告说:
"警告:尝试显示其视图不在窗口层次结构中!"
为什么要尝试在MenuViewController上呈现它而不是在GameViewController上(它是SKScenes发生的viewcontroller?)
我真的很感激帮助
答案 0 :(得分:0)
在您的情况下,视图的视图控制器与当前窗口之间存在差异。我认为使用从场景到视图控制器的委托方法来实现它是一个更好的主意。让视图控制器的代码显示排行榜。