21

私は現在、衝突ステートメントにこのコードを持っています。オブジェクトと衝突すると、このパーティクルが発生しますが、どうすればそれを止めることができますか? それは永遠に続くので、連絡先などごとに数回だけ発生したいのですが

SKEmitterNode *emitter =  [NSKeyedUnarchiver unarchiveObjectWithFile:[[NSBundle mainBundle]     pathForResource:@"ff" ofType:@"sks"]];
emitter.zPosition = 0;
emitter.particlePositionRange = CGVectorMake(0, self.size.height);
emitter.position = CGPointMake(self.size.width, self.size.height/2);
[self addChild:emitter];
4

6 に答える 6

3

これは、セレクターを使用しないことを除いて、Tapir が提供するこちらの回答に似ています。以前のバージョンでそれが必要かどうかはわかりませんが、ios 10 ではノード数が増えず、機能します。すなわち。エミッターを追加し、指定された数のパーティクルをポップしてから、エミッターを削除します。この場合、1 つのパーティクルを追加するように変更しました。

-(void) gainPoints:(int)x  y:(int)y {


NSString *pPlus1Path = [[NSBundle mainBundle] pathForResource:@"PlusEmitter" ofType:@"sks"];
SKEmitterNode *pEmitter = [NSKeyedUnarchiver unarchiveObjectWithFile:pPlus1Path];


// Place the emitter at the specified position
pEmitter.position = CGPointMake(x,y);
pEmitter.name = @"plus1";
pEmitter.particleLifetime = 1;
pEmitter.particleBirthRate = 1;
pEmitter.numParticlesToEmit = 1;
// Send the particles to the scene.
pEmitter.targetNode = self.scene;

[self addChild:pEmitter];

SKAction *pRemoveNode = [SKAction removeFromParent];
SKAction *pWaitForSecsN = [SKAction waitForDuration:1];
SKAction *pSequence = [SKAction sequence:@[pWaitForSecsN,pRemoveNode]];
[pEmitter runAction:pSequence];

}

于 2016-12-18T18:33:38.260 に答える
1

一時停止するときに必要なもの:

emitter.hidden = true

再起動時に必要なもの:

emitter.hidden = false
emitter.resetSimulation()
于 2016-07-12T10:52:09.503 に答える