当 UINavigationController 推送创建 SKScene 的 UIViewController 时 Obj-c 崩溃

Obj-c crash when UINavigationController pushing UIViewController which creates SKScene

所以我和一群学生正在为 IOS 开发一款游戏。我们从两个独立的项目开始,一个是制作菜单、商店、制作人员名单、教程等。

另一个项目将在游戏本身上工作,然后通过 github 将两者合并在一起并在我们的主菜单上附加 'play button',这是一个带有隐藏控制栏的导航控制器里面有一个视图控制器。

目前的问题是游戏本身运行良好,但试图将其集成到主菜单项目中导致它崩溃。

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Configure the view.
    SKView * skView = (SKView *)self.view;
    skView.showsFPS = YES;
    skView.showsNodeCount = YES;

    // Create and configure the scene.
    SKScene * scene = [MyScene sceneWithSize:skView.bounds.size];
    scene.scaleMode = SKSceneScaleModeAspectFill;

    // Present the scene.
    [skView presentScene:scene];
}

这是我们游戏的视图控制器中的代码。

MainMenuViewController *mainMenu = [[MainMenuViewController alloc] init];
UINavigationController *navCont = [[UINavigationController alloc] initWithRootViewController:mainMenu];

[navCont setNavigationBarHidden:YES animated:YES];

[self.window setRootViewController:navCont];
// Override point for customization after application launch.
return YES;

这是我们的AppDelegate didFinishLaunchingWithOptions函数

最后:

-(void) startNewGame
{
    NSLog(@"Game Started!");

    //ViewController *v = [[ViewController alloc] init];
    //[self.navigationController pushViewController:v animated:NO];
    CGFloat winWidth = [UIScreen mainScreen].bounds.size.width;
    CGFloat winHeight = [UIScreen mainScreen].bounds.size.height;

    //CGSize s = CGSizeMake(winWidth, winHeight);


    SKView *v  = (SKView *)self.view;

    v.showsFPS = YES;
    v.showsNodeCount = YES;

    SKScene *myScene = [[MyScene alloc] initWithSize:v.bounds.size];
    myScene.scaleMode = SKSceneScaleModeAspectFill;

    [v presentScene:myScene];
}

这是我们的 StartGame() 函数,当按下主菜单视图控制器上的按钮时调用该函数。

需要做什么才能让它发挥作用?我担心我们将不得不重写菜单以使其与游戏兼容....

错误提示您正在尝试调用UIView 上的setShowsFPS 方法,当然UIView 没有这样的方法。显然你的控制器的 self.view 是 UIView 而不是 SKView。您可能没有在故事板中将控制器视图的 class 更改为 SKView。