bodyWithPolygonFromPath:path崩溃App

时间:2015-01-08 21:34:52

标签: ios sprite-kit skphysicsbody

我使用此代码创建基于体积的物理主体

    // Add a physcis body to the largeRock by creating a path
    CGFloat offsetX = largeRock.frame.size.width * largeRock.anchorPoint.x;
    CGFloat offsetY = largeRock.frame.size.height * largeRock.anchorPoint.y;

    CGMutablePathRef path = CGPathCreateMutable();

    CGPathMoveToPoint(path, NULL, 12 - offsetX, 57 - offsetY);
    CGPathAddLineToPoint(path, NULL, 0 - offsetX, 48 - offsetY);
    CGPathAddLineToPoint(path, NULL, 0 - offsetX, 21 - offsetY);
    CGPathAddLineToPoint(path, NULL, 0 - offsetX, 21 - offsetY);
    CGPathAddLineToPoint(path, NULL, 21 - offsetX, 0 - offsetY);
    CGPathAddLineToPoint(path, NULL, 39 - offsetX, 0 - offsetY);
    CGPathAddLineToPoint(path, NULL, 60 - offsetX, 9 - offsetY);
    CGPathAddLineToPoint(path, NULL, 60 - offsetX, 39 - offsetY);
    CGPathAddLineToPoint(path, NULL, 48 - offsetX, 57 - offsetY);
    CGPathAddLineToPoint(path, NULL, 12 - offsetX, 57 - offsetY);

    CGPathCloseSubpath(path);

    largeRock.physicsBody = [SKPhysicsBody bodyWithPolygonFromPath:path];

这在模拟器上工作正常,但是当我在iPad上测试它时,当“largeRock”被添加到场景时应用程序崩溃

最后一行是崩溃。 当我将“bodyWithPolygonFromPath”更改为“bodyWithEdgeLoopF​​romPath”时,应用程序运行正常,但是精灵不受重力或任何其他物理影响,因为它现在是基于Edge的物理主体。

由于我需要bigRock受到重力的影响,我不知道该怎么做。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

路径中有两个相同的点,至少不在路径终点的重复点。

此外,如果路径不是凸形,则帽子也可能导致崩溃。