Организация значений zPosition в Sprite Kit с помощью перечислений

Мы использовали перечисления для организации zPositions наших спрайтов. Когда мы начали добавлять в нашу игру SKNodes с несколькими подпрайсами, структура быстро начала разрушаться. Некоторые дочерние спрайты, которые были размещены на экране, должны были иметь отрицательные значения, чтобы быть ниже других узлов с дочерними элементами. Эти отрицательные значения трудно отслеживать по отношению к другим спрайтам в отдельных перечислениях.

Есть ли лучший способ организовать zPosition спрайтов (особенно с подпрайтами), чем использование перечислений?

2 ответа

Решение

После прочтения вашей проблемы, похоже, что вы используете несколько перечислений для организации своего z -заказа. Я предлагаю использовать одно перечисление для z -упорядочения вашей игры.

Используйте слои, чтобы организовать вашу сцену:

- (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
Другие вопросы по тегам