Изменить направление существующих частиц
Я использую систему 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)