Как переместить узел эмиттера на фронт?

Фон-х zPosition равен 1, а для узла эмиттера - 2. Тем не менее фон находится спереди. Я даже пробовал более высокие цифры, но это не поможет.

Код

SKSpriteNode *bg = [SKSpriteNode spriteNodeWithImageNamed:@"TiltToMove_BG"];
bg.size = self.size;
bg.zPosition = 1;
bg.position = CGPointMake(self.size.width * 0.5, self.size.height * 0.5);
[self addChild:bg];

NSString *fireEmmitterPath = [[NSBundle mainBundle] pathForResource:@"fire" ofType:@"sks"];
SKEmitterNode *fireEmmitter = [NSKeyedUnarchiver unarchiveObjectWithFile:fireEmmitterPath];
fireEmmitter.position = CGPointMake(self.size.width * 0.5, self.size.height * 0.5 - 100);
fireEmmitter.name = @"fireEmmitter";
fireEmmitter.zPosition = 2;
fireEmmitter.targetNode = self;
[self addChild:fireEmmitter];

1 ответ

Решение

Есть свойство SKEmitterNode называется particleZPosition,

Значением по умолчанию является 0.0 поэтому вам нужно будет изменить это, чтобы частицы появлялись спереди.

fireEmitter.particleZPosition = 2;

zPosition фактического узла эмиттера в значительной степени не имеет значения, поскольку он невидим.

Это потому, что вы помещаете частицы на родительский узел...

fireEmitter.targetNode = self;

Целевой узел - это место, где добавляются частицы.

Если бы вы оставили это как nil, то частицы были бы добавлены к узлу эмиттера и поэтому уже были бы перед фоном, потому что они были бы в zPosition 0.0 на узле эмиттера, который имеет zPosition 2.0.

Конечно, если вы затем перемещаете эмиттер, все частицы будут двигаться так же, как и эмиттер, так что, возможно, это не тот эффект, который вам нужен.

Во всяком случае, вы должны быть отсортированы сейчас.

Вы можете найти эту информацию в документации SKEmitterNode,

Другие вопросы по тегам