8

プレイヤーが移動するたびに、作成したパーティクルがプレイヤーに追従するようにしようとしています。私が再現しようとしている効果は、あなたがウェブサイトにいて、あなたのマウスを追うある種のオブジェクトのセットを持っているときのようなものです. プレイヤーの動きに合わせてパーティクルを動かそうとしましたが、意図した効果が再現されていません。助言がありますか?私のコード:

宣言粒子

NSString *myParticlePath = [[NSBundle mainBundle] pathForResource:@"trail" ofType:@"sks"];
self.trailParticle = [NSKeyedUnarchiver unarchiveObjectWithFile:myParticlePath];
self.trailParticle.position = CGPointMake(0,0);
[self.player addChild:self.trailParticle];

移動方法

 -(void)dragPlayer: (UIPanGestureRecognizer *)gesture {

         if (gesture.state == UIGestureRecognizerStateChanged) {

              //Get the (x,y) translation coordinate
              CGPoint translation = [gesture translationInView:self.view];

              //Move by -y because moving positive is right and down, we want right and up
              //so that we can match the user's drag location (SKView rectangle y is opp UIView)
              CGPoint newLocation = CGPointMake(self.player.position.x + translation.x, self.player.position.y - translation.y);
              CGPoint newLocPart = CGPointMake(self.trailParticle.position.x + translation.x, self.trailParticle.position.y - translation.y);

              //Check if location is in bounds of screen
              self.player.position = [self checkBounds:newLocation];
              self.trailParticle.position = [self checkBounds:newLocPart];
              self.trailParticle.particleAction = [SKAction moveByX:translation.x y:-translation.y duration:0];
              //Reset the translation point to the origin so that translation does not accumulate
              [gesture setTranslation:CGPointZero inView:self.view];

         }

    }
4

2 に答える 2

15

これを試して:

1) エミッターがシーン内にある場合、このエミッターのプロパティtargetNodeを使用し、シーンとして設定します。つまり、パーティクルはエミッターの子ではなく、トレイルを残す必要があるシーンになります..

これが正しいかどうかはわかりません (私は C# で行います):

self.trailParticle.targetNode = self; // self as Scene

そしていくつかの追加:

2)エミッターを子として self.player にアタッチして、プレーヤーと一緒に自動的に移動することができれば、これは必要ないと思います。

self.trailParticle.position = [self checkBounds:newLocPart];
self.trailParticle.particleAction = [SKAction moveByX:translation.x y:-translation.y duration:0];
于 2014-01-14T14:43:08.283 に答える