I'm trying to set up a simple Sprite Kit setup. All I'm doing is re-creating the default xCode template 'Sprite Kit Game' from an 'Empty Application'.
It keeps crashing on the skView.showsFPS = YES; line. Which I can't explain. Can you? Thanks!
Some code:
AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
MenuController *menuController = [[MenuController alloc] init];
self.window.rootViewController = menuController;
[self.window makeKeyAndVisible];
return YES;
}
MenuController.m
- (void)viewDidLoad
{
[super viewDidLoad];
SKView *skView = (SKView *)self.view;
skView.showsFPS = YES;
skView.showsNodeCount = YES;
MultiplayerView *gameView = [MultiplayerView sceneWithSize:skView.bounds.size];
gameView.scaleMode = SKSceneScaleModeAspectFill;
[skView presentScene:gameView];
}
When I launch this, the following error occurs:
2013-11-10 13:08:01.605 ByS[9419:70b] -[UIView setShowsFPS:]: unrecognized selector sent to instance 0x10c00bc60
2013-11-10 13:08:01.608 ByS[9419:70b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIView setShowsFPS:]: unrecognized selector sent to instance 0x10c00bc60'
In the interface builder, change the class of the window's view to SKView
. Type-casting a UIView
into SKView
won't do anything unless the UIView
was previously obtained by casting a SKView
.
I had the same issue when starting from a single-view or empty application, vs the usual SpriteKit template. Mine worked when I added some code I found to overwrite the loadView method. Try putting it just above your viewDidLoad in your View Controller.
- (void)loadView {
CGRect applicationFrame = [[UIScreen mainScreen] applicationFrame];
SKView *skView = [[SKView alloc] initWithFrame:applicationFrame];
self.view = skView;
}
The .h file is the usual UIViewController. And remember to #import after you have linked the framework!:
@interface CharacterViewController : UIViewController
So the full .m code would be something like:
@implementation CharacterViewController
- (void)loadView {
CGRect applicationFrame = [[UIScreen mainScreen] applicationFrame];
SKView *skView = [[SKView alloc] initWithFrame:applicationFrame];
self.view = skView;
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"CharacterViewController viewDidLoad");
// Do any additional setup after loading the view.
// Configure the view.
SKView * skView = (SKView *)self.view;
skView.showsFPS = YES;
skView.showsNodeCount = YES;
// Create and configure the scene.
CharacterScene *character = [[CharacterScene alloc]initWithSize:CGSizeMake(skView.bounds.size.width, skView.bounds.size.height)];
character.backgroundColor = [UIColor blueColor];
[skView presentScene:character];
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With