最近作SpriteKit游戏,发现了好多坑,虽然是苹果开发的库,可是因为冷门,问题仍是不少的。既然用了,我就解解相关的坑吧。数组
首先遇到的问题就是,scene场景加载的问题:通常状况是这样的
spa
UIViewController->SKView(UIView子类)->SKScenecode
一个skview只能presentScene一个SKScene,那就会有个问题了,有多个SKScene切换的时候返回会是很大的麻烦 。游戏
我但愿skview能像UINavigationController同样,能简单push和pop。开发
那咱们就写一个SKView的分类吧,加入push和pop方法,记录全部的SKScenerem
#import <SpriteKit/SpriteKit.h> @interface SKView (Push) - (NSArray *)sceneArray; - (void)pushScene:(SKScene *)scene; - (void)popScene; @end
#import "SKView+Push.h" static NSMutableArray *sceneArray = nil; @implementation SKView (Push) - (void)pushScene:(SKScene *)scene { if (scene == nil || ![scene isKindOfClass:[SKScene class]]) { return; } if (!sceneArray) { sceneArray = [NSMutableArray array]; } [sceneArray addObject:scene]; [self presentScene:scene]; } - (void)popScene { if (sceneArray.count > 1) { [sceneArray removeObjectAtIndex:sceneArray.count-1]; [self presentScene:[sceneArray lastObject]]; } } - (NSArray *)sceneArray { return sceneArray; } @end
用静态数组记录SKScene造成栈。这样切换场景就能方便不少了it