精灵套件 - SKShapeNode路径不绘制四线曲线

时间:2014-01-22 21:44:41

标签: ios sprite-kit cgpath skshapenode

我一直在钻研Apple的新Sprite Kit,并且已经使用了一段时间了。 但是在尝试为SKShapeNode绘制弯曲路径时遇到了问题。它似乎只是绘制一条直线。

以下是我遇到的问题的一个非常简单的示例 - 尝试为CGPath绘制SKShapeNode

    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的错误?

1 个答案:

答案 0 :(得分:2)

“y”应该是曲线的高度,尝试给它一个非零值。 通过给出一个坐标,它无法知道曲线应该有多陡峭。这就是身高

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