改变现有粒子的方向

5
我正在使用SpriteKit的粒子发射器系统,在屏幕中心以玩家飞船为中心构建移动星空背景。
当玩家触摸屏幕区域时,我会计算角度并使玩家精灵朝那个方向旋转。
然而,当我将其应用于星空背景时,整个矩形都会旋转。但是我想要的是,单个粒子仅朝着新方向开始移动。
这就像旋转整张有点纸的纸张和让点只朝着新角度移动之间的区别。明白我的意思吗?
以下是我已经实现的部分,其中玩家正确旋转,但星空背景“像一整张纸一样旋转”:
-(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个回答

0
你应该创建一个名为particleField的节点,并将其用作你现有发射器的targetNode。(同时,将发射器作为子节点添加到此节点中)。particleField只是一个标准的SKNode而不是发射器。它将作为子节点拥有一个发射器和所有粒子也将作为子节点。
如果你愿意,可以将其视为“粒子层”。
现在,你有了一个单一的节点,它“拥有”所有的粒子和发射器等等...
粒子的位置和方向都取决于这个particleField节点的位置。
现在,你可以旋转、移动(或缩放等)particleField,所有的粒子都会随之移动。

0

编辑 particleRotation 属性似乎对现有或新的粒子没有明显影响。 - Christopher

0

你需要按照以下方式调整发射角度:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接