我正在研究如何最好地绕过拐角,CGPathRef
这样当我召唤SKAction
-followPath:asOffset:orientToPath:duration:
我的僵尸时,它会平滑地在拐角处进行动画处理,而不是每次小家伙拐角时都会折断 90 度。网络上(和 SO)似乎有一些关于使用 Catmull-Rom 样条线的解决方案,我在做 3D 动画时很熟悉这些样条线。
我的问题:是否有人知道添加圆角的简单方法,实现 Catmull-Rom 似乎有点超出我的需要。
其次:如果它确实需要是 Catmull-Rom 有多容易。很难将结果曲线恢复为 aCGPathRef
以便我可以将其输入到我的SKAction
?
注意:路径是由一个简单的 A* 实现生成的,该实现存储了许多 CGPoint [x,y] 路点,然后我想将其用作路径的基础。如果可能的话,我不想使用贝塞尔曲线,因为我想让新路径靠近瓷砖中心线以避免可碰撞的物体。当我几乎到达初始路径近似所需的位置时,我也不想开始计算船体的 ctrl 点。
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, [[[self pathArray] firstObject] position].x, [[[self pathArray] firstObject] position].y);
[[self pathArray]enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if(idx != 0) {
CGPathAddLineToPoint(path, NULL, [obj position].x, [obj position].y);
}
}];
SKAction *pathAction = [SKAction followPath:path asOffset:NO orientToPath:YES duration:[[self pathArray] count]/2];
[[self zombie] runAction:pathAction];