最近作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