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

最近做SpriteKit游戏,发现了好多坑,虽然是苹果开发的库,但是由于冷门,问题还是很多的。既然用了,我就解解相关的坑吧。

首先遇到的问题就是,scene场景加载的问题:一般情况是这样的

UIViewController->SKView(UIView子类)->SKScene

一个skview只能presentScene一个SKScene,那就会有个问题了,有多个SKScene切换的时候返回会是很大的麻烦 。

我希望skview能像UINavigationController一样,能简单push和pop。

那我们就写一个SKView的分类吧,加入push和pop方法,记录所有的SKScene

#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形成栈。这样切换场景就能方便很多了

你可能感兴趣的:(SpriteKit解坑系列(一):scene栈列表)