iOS 9更新后,SKFieldNode定位错误

时间:2015-10-09 10:25:20

标签: sprite-kit ios9 skemitternode skfieldnode

我有一些代码在iOS 8中完美运行,但是自从iOS 9以来,一些SKFieldNodes表现得非常奇怪。下图显示了一个场景,其中包含两个SKFieldNodes(标有红色精灵)和SKEmitterNode个发射金色粒子的场景。

enter image description here

在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];

似乎字段节点位于右上角附近,但红色圆圈子节点显示不同。

1 个答案:

答案 0 :(得分:0)

在彻底调查此问题之后,我得出结论,它是iOS 9中引入的SpriteKit错误。您可以在下面找到包含SKEmitterNodeSKFieldNode和两个{{1}的测试场景标记初始视口和字段的位置。所有节点都是SKShapeNodes的后代,用于翻译“世界”。

虽然该字段的位置不会改变,但其效果的中心确实如此。

仅当rootNode SKEmitterNode's属性设置为targetNode时,力量计算才是正确的,这并非总是需要。

The view's initial state.

黄色圆圈标志着场地的位置。然而,粒子被拉向右上角。以下是一些立场:

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 ),粒子被绘制到另一个点,该点移动到更靠近左下角,同时转换到相反的位置。

enter image description here

翻译后的某些职位:

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)。