SpriteKit解坑系列(一):scene棧列表

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

相關文章
相關標籤/搜索