Организация значений 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