我有一些代码在iOS 8中完美运行,但是自从iOS 9以来,一些SKFieldNodes
表现得非常奇怪。下图显示了一个场景,其中包含两个SKFieldNodes
(标有红色精灵)和SKEmitterNode
个发射金色粒子的场景。
在iOS 8中,这些字段会吸引粒子并将它们“吸”到磁铁的尖端。从iOS 9开始,粒子向右上角加速,如红色箭头所示。此外,我不得不增加字段的strength
甚至使效果可见。
以下是相应的代码:
SKSpriteNode* magnet = [SKSpriteNode spriteNodeWithImageNamed:@"StarMagnet_main"];
//Add field node
SKFieldNode* field = [SKFieldNode radialGravityField];
field.strength = 10.0;
field.falloff = 0.1;
//Add a red circle to visualize the node
SKShapeNode* debugNode = [SKShapeNode shapeNodeWithCircleOfRadius:20.0];
debugNode.fillColor = [UIColor redColor];
[field addChild:debugNode];
field.position = CGPointMake(magnet.size.width * 0.3, magnet.size.height * 0.45);
field.categoryBitMask = LECategoryDust;
[magnet addChild:field];
//Add second field
field = [field copy];
field.position = CGPointMake(-field.position.x, field.position.y);
[magnet addChild:field];
//Add particle emitter
SKEmitterNode* emitter = [SKEmitterNode emitterNamed:@"MagneticParticleEmitter"];
emitter.fieldBitMask = LECategoryDust;
emitter.position = CGPointMake(0, magnet.size.height/2.0);
[magnet addChild:emitter];
似乎字段节点位于右上角附近,但红色圆圈子节点显示不同。
答案 0 :(得分:0)
在彻底调查此问题之后,我得出结论,它是iOS 9中引入的SpriteKit错误。您可以在下面找到包含SKEmitterNode
,SKFieldNode
和两个{{1}的测试场景标记初始视口和字段的位置。所有节点都是SKShapeNodes
的后代,用于翻译“世界”。
虽然该字段的位置不会改变,但其效果的中心确实如此。
仅当rootNode
SKEmitterNode's
属性设置为targetNode
时,力量计算才是正确的,这并非总是需要。
黄色圆圈标志着场地的位置。然而,粒子被拉向右上角。以下是一些立场:
scene
正如您所见,字段和黄色圆圈具有相同的位置(和父级)。
当移动场景时(即仅Root scene pos: 160x, 284y | parent pos: 160x, 284y
Field scene pos: 80x, 142y | parent pos: -80x, -142y
Target scene pos: 80x, 142y | parent pos: -80x, -142y
),粒子被绘制到另一个点,该点移动到更靠近左下角,同时转换到相反的位置。
翻译后的某些职位:
rootNode
场地的位置没有改变,但重心确实如此。
为了更好地说明这种行为,我上传了一个截屏视频: https://youtu.be/EJs4vPYMndU
欢迎任何愿意自己尝试这一点的人,这是本实验中使用的测试场景的代码:
Root scene pos: 84x, 149y | parent pos: 84x, 149y
Field scene pos: 4x, 7y | parent pos: -80x, -142y
Target scene pos: 4x, 7y | parent pos: -80x, -142y
尽管尝试了几个小时,但我没有设法通过重新定位字段节点来弥补计算错误。如果有人这样做,如果他们可以分享它会很棒。
编辑:我还提交了一份错误报告(23063175)。