Sprite Kit - SKShapeNode路径未绘制二次曲线

31

我一直在研究苹果新的Sprite Kit,并且已经使用它有一段时间了。 然而,当我尝试为SKShapeNode绘制曲线路径时,我遇到了一个问题。它似乎只会画一条直线。

这里是我遇到问题的一个非常简单的例子 - 尝试用CGPathSKShapeNode绘制:

    CGMutablePathRef path = CGPathCreateMutable();
    CGPathMoveToPoint(path, NULL, 0, 0);
    CGPathAddQuadCurveToPoint(path, NULL, 50, 100, 100, 0);
    CGPathAddLineToPoint(path, NULL, 50, -100);
    CGPathCloseSubpath(path);

    SKShapeNode *shape = [[SKShapeNode alloc]init];
    shape.path = path;

    [self addChild:shape];

    CGPathRelease(path);

这是我的ASCII艺术作品,展示了它正在做什么(抱歉我没有足够的声望来发布实际图片):

---------------------------------------------------------------------------------
|          EXPECTED RESULT              |            ACTUAL RESULT              |
---------------------------------------------------------------------------------
|                                       |                                       |
|             __----__                  |                                       |
|            /        \  <- Curve       |                ?                      |
|           /          \                |           ____________                |
|           \          /                |           \          /                |
|            \        /                 |            \        /                 |
|             \      /                  |             \      /                  |
|              \    /                   |              \    /                   |
|               \  /                    |               \  /                    |
|                \/                     |                \/                     |
---------------------------------------------------------------------------------

正如你所看到的,这行代码并未绘制出我想要的曲线:

CGPathAddQuadCurveToPoint(path, NULL, 50, 100, 100, 0);
我尝试使用CGPathAddArcToPoint(...),它有效,并且在这个示例中是一个很好的替代品。但是,对于我的实际需求,我需要能够绘制二次曲线。
除了CGPathAddQuadCurveToPoint(...)CGPathAddCurveToPoint(...),CGPath似乎在正确地绘制其他所有内容,但它们只是在点之间绘制一条直线。
有人知道问题是什么吗?或者这是Sprite Kit的一个错误吗?

2
你的代码在我的端上运行正常,按预期显示曲线。你尝试过在新项目中隔离编译吗?也许由于某些副作用,在更广泛的应用上它并不起作用? - Batalia
1
我刚刚尝试了一下,结果发现那一定是问题所在。我最近在我的iPhone上安装了iOS 7.1 beta,所以我也需要在Xcode 5.1 beta中进行编译。看起来那个版本的Xcode不喜欢曲线。我通过iOS模拟器尝试了Xcode 5.0,似乎工作得很好。我现在会通过苹果开发者论坛进一步研究它。很高兴知道这不是我的编码能力引起的:D谢谢你的帮助。 - David Williames
5
Xcode 5.1公开版(5B130a)在使用iOS 7.1模拟器时存在同样的问题。iOS 7.0模拟器没有问题。目前我无法在iOS 7.1设备上进行测试以查看是否存在问题。 - jowie
1
同样的问题。XCode版本5.1(5B130a),iOS 7.1(11D167)无法绘制二次贝塞尔曲线,只能绘制三次贝塞尔曲线,无论是在模拟器上还是在设备上。 - alecail
2
SKShapeNode在iOS 7中存在缺陷。请参见SKShapeNode, you are dead to me - Jamie McDaniel
显示剩余6条评论
1个回答

2

“y”应该是您曲线的高度,尝试给它一个非零值。 通过指定坐标,程序无法确定曲线的陡峭程度。因此,这就是该点的高度。

CGPathAddQuadCurveToPoint(path, NULL, 50, 100, 100, 30);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接