发射的粒子遵循父节点

时间:2014-06-19 12:33:19

标签: sprite-kit

我正在设置SKNode,如下所示:

- (id)init {
    self = [super init];

    if (self) {
        SKTextureAtlas *atlas = [SKTextureAtlas atlasNamed:@"Sprites"];

        SKSpriteNode *spriteNode = [SKSpriteNode spriteNodeWithTexture:[atlas textureNamed:@"Cat"]];
        [self addChild:spriteNode];

        // Create particle trail
        SKEmitterNode *emitterNode = [NSKeyedUnarchiver unarchiveObjectWithFile:[[NSBundle mainBundle] pathForResource:@"Hearts" ofType:@"sks"]];
        emitterNode.position = CGPointMake(0, 20);
        [self insertChild:emitterNode atIndex:0];

        // Setting up the physics
        self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:spriteNode.frame.size];
        self.physicsBody.dynamic = YES;
        self.physicsBody.affectedByGravity = NO;
    }

    return self;
}

当此节点沿X轴水平移动时,粒子轨迹的源会随之移动,这是预期的。不期望的是,发射的粒子也会这样做,相反,我希望它们从原始 X位置沿Y轴直线向上移动。

有没有办法防止这种行为?

创作(在场景中):

SPAPlayer *player = [[SPAPlayer alloc] init];
player.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));
[self addChild:player];

运动代码:

[node.physicsBody applyForce:CGVectorMake(20 * data.acceleration.x, 0)];

供参考的图片:

enter image description here

1 个答案:

答案 0 :(得分:2)

使发射器成为精灵的子级(就像你已经拥有的那样)。

要使粒子独立于玩家节点的位置移动,请指定SKEmitterNode targetNode property,最好将其指定为场景,如下所示:

// be sure self.scene isn't still nil when you do this, for instance in node's init
emitter.targetNode = self.scene;

这会在玩家精灵位置产生粒子,但是他们不会随之一起旅行。