我正在iOS9 Beta 4中测试我的应用程序,并发现许多以前无法在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,看起来像 Spark 在飞舞。在iOS9上,SKEmitterNode完全不可见(根本不出现在SKScene中)。如果我注释掉以下行:
flameTrail.particleAction = move; // TODO iOS9 compatibility issues!
那么我将在场景中看到SKEmitterNode,但是看不到任何与粒子相关的运动。
我还用其他几个SKAction对它进行了测试,结果没有任何变化。我向苹果提交了一个错误;同时,任何人都可以确认/否认此问题或在代码中看到问题吗?
最佳答案
iOS9的SKEmitterNode targetNode属性问题。
设置targetNode属性后,粒子将在zPosition 0处发射。将zPosition设置为其他值都无所谓,粒子仍将在zPosition 0处呈现。如果将zPosition的值打印到控制台,它将返回您已设定的内容。如果将targetNode设置为nil,则粒子将在正确的图层上渲染。
解决方案:
我将所有背景 Sprite 重新排序为
希望这会有所帮助,我将提交一个错误报告,还在github上添加了一个示例存储库。
https://github.com/fromkey/iOS9_BUG_SKEmitterNode_targetNode/tree/master