SKEmitterNode particleAction不工作iOS9testing版

我正在iOS9 Beta 4中testing我的应用程序,并发现许多以前在iOS8中工作不正常的代码。 另一个例子是SpriteKit的SKEmitterNode“particleAction”属性。 以下代码适用于iOS8,但不适用于iOS9:

// create the particle movement action SKAction *move = [SKAction moveByX:100 y:100 duration:5]; // also, I've tested several other SKActions, such as scaleBy, fade, rotate, to no effect here // create a target node and add to the SKScene SKNode *targetNode = [SKNode node]; targetNode.position = origin; [mySKSceneNode addChild:targetNode]; // add an emitter node that has a target and an SKAction SKEmitterNode *flameTrail = [NSKeyedUnarchiver unarchiveObjectWithFile:[[NSBundle mainBundle]pathForResource:@"FlameAttack" ofType:@"sks"]]; flameTrail.position = origin; flameTrail.particleAction = move; // TODO iOS9 compatibility issues! flameTrail.targetNode = targetNode; [mySKSceneNode addChild:flameTrail]; 

在iOS8上面的代码将产生一个SKEmitterNode,看起来像火花飞行。 在iOS9上,SKEmitterNode是完全不可见的(根本不出现在SKScene中)。 如果我注释掉下面这行:

 flameTrail.particleAction = move; // TODO iOS9 compatibility issues! 

那么我将在场景中看到SKEmitterNode,但是我不会看到与粒子相关的任何运动。

我也用其他几个SKA进行了testing,结果没有任何变化。 我向苹果提交了一个bug。 在此期间任何人都可以确认/否认这个问题或在代码中看到问题?

iOS9 SKEmitterNode targetNode属性问题。

当设置targetNode属性时,粒子将在zPosition 0处发射。如果将zPosition设置为其他任何值,粒子将仍然在zPosition 0处呈现,这并不重要。如果将zPosition的值打印到控制台,它将会回报你已经设定的任何东西。 如果设置targetNode = nil,则粒子将在正确的图层上呈现。

解决方法:我将所有背景精灵重新sorting为<= -1

希望这有助于,我要提交一个错误报告,我还在github上添加了一个示例回购。 https://github.com/fromkey/iOS9_BUG_SKEmitterNode_targetNode/tree/master

可以确认这在iOS 9 beta 5.particleAction似乎已经完全停止工作! 希望苹果在下一个testing/ GM版本中修复。

我的新游戏之一依赖于此,所以有点紧张!

我自己也有类似的问题,但是我的问题是,我的代码是像这样设置targetNode属性:

 class GameScene : SKScene { func addEmitter(fileName: String, position: CGPoint) { let particle = SKEmitterNode(fileNamed: fileName)! particle.position = position //particle.targetNode = self // DOES NOT WORK ON iOS 9 BETA self.addChild(particle) // Don't forget to remove the emitter node after the explosion self.runAction(SKAction.waitForDuration(2), completion: { particle.removeFromParent() }) } } 

删除particle.targetNode行导致再次呈现粒子。 在iOS 9 beta 6上testing

已更新以显示SKScene中的完整用法。

我在iOS 9中遇到了同样的问题。

Juet删除targetNode属性,它将再次工作。

当创build嵌套在Scene文件中的SKEmitterNode时,我遇到了同样的问题。 我最终迭代所有的节点,find发射器并复制它们。 然后它又开始工作了。

 for (SKNode *node in containerNode.children) { if ([node isKindOfClass:[SKEmitterNode class]]) { SKEmitterNode *e = (SKEmitterNode *)node; [e removeFromParent]; SKEmitterNode *new = [e copy]; [containerNode addChild:new]; } } 

如果你不想失去targetNode给你的function,那么我find的工作就是给发射器和发射粒子分配一个zPosition值。

我通常build立一个枚举为我提供所有节点的Z位置值,如:

 typedef enum { kZBG = 0, kZSpaceship = 10, kZBullets = 15, kZSpark = 20, } NodeZOrder; 

然后,我用这个在我的发射:

 NSString *sparkPath = [[NSBundle mainBundle] pathForResource:@"spark" ofType:@"sks"]; self.sparkEmitter = [NSKeyedUnarchiver unarchiveObjectWithFile:sparkPath]; self.sparkEmitter.targetNode = self.background; self.sparkEmitter.zPosition = kZSpark; self.sparkEmitter.particleZPosition = kZSpark; 

我发现这工作正常。 我的粒子留在我想要他们在背景上,他们都在iOS 9和iOS 10上都可见。