当 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。
所以我和一群学生正在为 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。