当UINavigationController按下创建SKScene的UIViewController时,Obj-c崩溃

时间:2015-04-12 21:10:40

标签: ios objective-c uiviewcontroller uinavigationcontroller

所以我和一群学生正在为IOS开发游戏。我们开始时有两个独立的项目,一个是菜单,商店,学分,教程等。

另一个项目将适用于游戏本身,然后通过github将两者合并在一起并附上“播放按钮”。在我们的主菜单上,这是一个带有隐藏控制栏的导航控制器,里面有一个视图控制器。

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

- (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()功能,在主菜单视图控制器上按下按钮时会调用该功能。

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

1 个答案:

答案 0 :(得分:0)

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