SKEmitterNode targetNode 路径跟随被反转

SKEmitterNode targetNode path following is inverted

我创建了一个 SKEmitterNode(标准 Fire.sks 模板)并将其添加到一个名为 ball 的 SKSpriteNode 中。问题是,我遵循了 iOS Games by Tutorials 的教程以及他们教我创建 Tiled 地图的方法,本质上是在初始化时翻转它们,以便 (0, 0) 位于屏幕的左下角& 不是左上角。我认为这会影响我的 SKEmitterNode targetNode 属性,因为当球在场景中移动时,火焰发射器节点会朝完全相反的方向移动。有人可以告诉我该怎么做才能改变这个吗?我无法更改世界参数,所以我需要一些可以改变 SKEmitterNode 轨迹的东西,以便它实际上正确地跟随球节点。这是我当前的代码:

NPCBall *ball   = [[NPCBall alloc] initWithBallType:BallTypeRed andName:@"Ball Red"];
ball.position   = CGPointMake(x + w/2, y + h/2);
ball.zPosition  = -104.0;
[_entityNode addChild:ball];

//Create a random Vector.dx & dy for the NPC. This will apply a random impulse to kick start NPC non-stop movement.
[ball.physicsBody applyImpulse:CGVectorMake([self randomVectorGeneration].dx, [self randomVectorGeneration].dy)];

//Create a particle for the ball (fire).
SKEmitterNode *emitFire = [NSKeyedUnarchiver unarchiveObjectWithFile:[[NSBundle mainBundle] pathForResource:@"Particle_Fire" ofType:@"sks"]];
emitFire.position       = CGPointMake(ball.position.x, ball.position.y);
emitFire.targetNode = ball;
[_entityNode addChild:emitFire];

P.S。 _entityNode,同时添加了球和 SKEmitterNode fire,是一个 SKNode。这又是一个名为 _worldNode 的 SKNode 的 child。 _worldNode 是 self 的 child(这是一个 SKScene)。这个 _worldNode 是翻转后的 (0, 0) 坐标从左下角开始。

my'n 的一个朋友找到了解决这个问题的方法。我将它张贴在这里以防有人也有一个倒置的 Tiled 地图,其中 (0, 0) 坐标位于场景的左下角。

    //Create a ball sprite.
    SKSpriteNode *ball = [SKSpriteNode spriteNodeWithColor:[SKColor redColor] size:CGSizeMake(20, 20)];
    ball.position   = CGPointMake(_worldNode.frame.size.width/2, _worldNode.frame.size.height/2);
    [_entityNode addChild:ball]; //<--_entityNode is also an SKNode. It's a child of _worldNode.
    ball.zPosition  = -104.0;

    //Create a random Vector.dx & dy for the NPC. This will apply a random impulse to kick start NPC non-stop movement.
    [ball.physicsBody applyImpulse:CGVectorMake([self randomVectorGeneration].dx, [self randomVectorGeneration].dy)];


    //Create a particle effect for the ball.
    SKEmitterNode *emitFire = [NSKeyedUnarchiver unarchiveObjectWithFile:[[NSBundle mainBundle] pathForResource:@"Particle_Fire" ofType:@"sks"]];
    emitFire.name           = @"Fire Emitter";
    emitFire.targetNode     = _worldNode; //<-- This is the demon. Make the emitter follow this SKNode since it moves when the ball moves. Everything in my game is a child of _worldNode.
    [ball addChild:emitFire]; //Add the emitter to the ball.