我正在设置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)];
供参考的图片:
答案 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;
这会在玩家精灵位置产生粒子,但是他们不会随之一起旅行。