Изменить направление существующих частиц

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

Когда игрок касается области экрана, я вычисляю угол и анимирую спрайт игрока, поворачивая это направление.

Однако, когда я применяю его к звездному полю, вращается весь прямоугольник, на котором нарисовано звездное поле. Однако я хочу, чтобы отдельные частицы просто начали двигаться в новом направлении.

Это разница между вращением целого листа бумаги с точками по всему и простым перемещением точек к новому углу. Имеет ли это смысл?

Вот что у меня есть, когда игрок вращается правильно, а звездное поле "вращается как целый лист бумаги":

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    // Choose one of the touches to work with
    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInNode:self];
    CGPoint center = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));

    CGPoint offset = rwSub(location, center);

    SKEmitterNode *starfield = (SKEmitterNode *)[self childNodeWithName:@"starfield"];

    SKSpriteNode *player = (SKSpriteNode *)[self childNodeWithName:@"player"];

    SKAction *rotateNode = [SKAction rotateToAngle: (CGFloat)atan2(offset.y, offset.x) duration:0.5  shortestUnitArc:TRUE];
    [player runAction: rotateNode];

    SKAction *rotateStarfieldNode = [SKAction rotateToAngle: (CGFloat)(atan2(offset.y, offset.x) - M_PI_2) duration:0.5  shortestUnitArc:TRUE];
    [starfield runAction: rotateStarfieldNode];
}

3 ответа

Что вы, вероятно, должны сделать, это иметь particleField узел или что-то и использовать это как targetNode для излучателя, который у вас есть. (Кроме того, поместите эмиттер в это как дочерний узел). particleField будет просто стандартом SKNode не излучатель. В детстве у него будет излучатель, и все частицы тоже будут детьми.

Относитесь к нему как к "слою частиц", если хотите.

Теперь у вас есть один узел, который "владеет" всеми частицами, эмиттером и т. Д.

Положение частиц и направление частиц все зависит от положения этого particleField узел.

Теперь вы можете вращать particleField и перемещать его и т. д. (или масштабировать и т. д.), и все частицы будут двигаться вместе с ним.

Вам нужно отрегулировать эмиссию Angle следующим образом:

[starField setEmissionAngle:(atan2(offset.y, offset.x) - M_PI_2)];

Вам, вероятно, нужно изменить SKEmitterNode"s particleRotation property ( https://developer.apple.com/library/iOS/documentation/SpriteKit/Reference/SKEmitterNode_Ref/Reference/Reference.html)

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