使用枚举在Sprite Kit中组织zPosition值

时间:2014-08-17 04:28:00

标签: ios enums sprite-kit sprite zposition

我们一直在使用枚举来组织我们的精灵的zPositions。当我们开始在我们的游戏中添加带有几个子页面的SKNodes时,结构很快就开始崩溃了。放置在屏幕上的一些儿童精灵必须具有负值才能在有孩子的其他节点下面。这些负值很难跟踪单独枚举中的其他精灵。

有没有比使用枚举更好的方法来组织精灵的zPosition(特别是那些具有子精灵的精灵)?

2 个答案:

答案 0 :(得分:1)

在您的问题中阅读更多内容后,您似乎正在使用多个枚举来整理您的z订单。我建议使用单个枚举来进行游戏的z排序。

答案 1 :(得分:0)

使用图层组织场景:

- (instancetype)initWithSize:(CGSize)size {
    if (self = [super initWithSize:size]) {
        self.view.ignoresSiblingOrder = YES;        
        [self addLayers];
    }
    return self;
}

- (void)addLayers {
    self.backgroundLayer = [SKNode node];
    self.backgroundLayer.zPosition = 100;
    [self addChild:self.backgroundLayer];

    self.playerLayer = [SKNode node];
    self.playerLayer.zPosition = 300;
    [self addChild:self.playerLayer];

    self.enemyLayer = [SKNode node];
    self.enemyLayer.zPosition = 400;
    [self addChild:self.enemyLayer];

    // UI elements must be on top of all nodes on the scene
    self.uiLayer = [SKNode node];
    self.uiLayer.zPosition = 1000;
}

- (void)addBackgrounds {
    SKSpriteNode *backgroundNode1 = [SKSpriteNode spriteNodeWithTexture:[self backgroundTexture1]];
    backgroundNode1.zPosition = 10;
    [self.backgroundLayer addChild:backgroundNode1];

    SKSpriteNode *backgroundNode2 = [SKSpriteNode spriteNodeWithTexture:[self backgroundTexture2]];
    backgroundNode2.zPosition = 20;
    [self.backgroundLayer addChild:backgroundNode2];
}    
.... etc