【问题标题】:SpriteKit crash when moving a sprite after it finishes a path, only on 64-bit devicesSpriteKit 在完成路径后移动精灵时崩溃,仅在 64 位设备上
【发布时间】:2014-02-28 15:17:16
【问题描述】:

当已分配路径的精灵在 64 位 iOS 设备上结束该路径并且仅当我在路径完成时移动精灵时,我看到崩溃。

这是堆栈跟踪(?)。

这是我用来创建路径的代码。

UIBezierPath *path1 = [[UIBezierPath alloc] init];

[path1 moveToPoint: CGPointMake(249, 430)];
[path1 addCurveToPoint: CGPointMake(154.7, 236.44) controlPoint1: CGPointMake(68.12, 359.17) controlPoint2: CGPointMake(117, 278.5)];
[path1 addCurveToPoint: CGPointMake(316, 127) controlPoint1: CGPointMake(192.41, 194.38) controlPoint2: CGPointMake(280.07, 195.64)];
[path1 addCurveToPoint: CGPointMake(249, -93) controlPoint1: CGPointMake(351.93, 58.36) controlPoint2: CGPointMake(327.18, -48.95)];

SKAction *firstPath = [SKAction followPath:[path1 CGPath] asOffset:NO orientToPath:NO duration:1.65];

当我运行代码时,我所做的只是告诉精灵运行这个动作以及它何时完成 -

这是导致崩溃的代码行。

[sprite runAction: [SKAction moveToPoint:CGPointMake(-100, -100)]];

我尝试打开 NSZombie,但没有看到任何结果。此外,我已将精灵设置为强属性,但仍然没有区别。

同样,此崩溃仅发生在 64 位 iOS 设备上,而不发生在 32 位设备上。

关于在哪里寻找解决方案的任何建议?

【问题讨论】:

    标签: ios 64-bit sprite-kit uibezierpath cgpath


    【解决方案1】:

    来自UIBezierPath CGPath documentation

    路径对象本身归 UIBezierPath 对象所有,并且是 仅在您对路径进行进一步修改之前有效。

    我假设通过将路径传递给 Sprite Kit,动作最终会释放它不拥有的路径,因此过度释放它。

    尝试复制路径:

    SKAction *firstPath = [SKAction followPath:CGPathCreateCopy([path1 CGPath])
                                      asOffset:NO
                                  orientToPath:NO
                                      duration:1.65];
    

    【讨论】:

    • 感谢您的回答,我会试一试,让您知道效果如何。
    • @steffen 仅 64 位设备才需要此解决方案是不是有点疯狂?到目前为止,我已经看到 2 次崩溃,其中 sprite kit 仅在 64 位设备上崩溃。有兴趣听听您对此的看法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 2017-10-31
    • 2014-07-06
    • 1970-01-01
    相关资源
    最近更新 更多