改变现有粒子的方向

时间:2013-12-11 06:02:47

标签: ios iphone sprite-kit particles skemitternode

我正在使用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 :(得分:0)

答案 1 :(得分:0)

您需要按如下方式调整emissionAngle:

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

答案 2 :(得分:0)

你应该做的是拥有particleField节点或其他东西,并将其用作你所拥有的发射器的targetNode。 (另外,也将发射器作为子节点放在此)。 particleField只是标准SKNode而不是发射器。它将有一个发射器作为一个孩子,所有的粒子也将是孩子。

将其视为"粒子层"如果你愿意的话。

现在你有一个拥有"拥有"的节点。所有粒子和发射器等...

粒子的位置和粒子的方向都取决于此particleField节点的位置。

现在你可以旋转particleField并移动它等...(或缩放它等等),所有粒子都会随之移动。