Meg*_*ron 5 animation path objective-c ios sprite-kit
我对sprite kit比较新.我想要实现的目标;
如果我能提供任何其他信息以帮助更清楚,请告诉我.
一如既往,非常感谢任何回应:)
好的,所以有一个很酷的小SKAction(我确定你熟悉那个类),它允许SKSpriteNode一个路径:
SKAction *move = [SKAction followPath:/*aPath*/ duration:1];
[myNode runAction:action];
// There's also a followPath:withSpeed: method which may be more suitable for you
Run Code Online (Sandbox Code Playgroud)
您需要的只是路径本身,您可以使用它UIBezierPath.UIBezierPath是objective-c类,它允许您定义路径,然后可以在drawRect:方法中的视图上绘制.它们也可以转换为CGPathRefs,然后可以跟随一个节点.
所有弧都是圆的一部分,并且有一种UIBezierPath设计用于定义弧的方法:arcWithCenter:radius:startAngle:endAngle:clockwise:.
所以...让我们假设你的节点在200,200的矩形中的点100,200处(即在x的中心但在y的顶部).您希望此节点遵循弧到它指向0,100的位置:

基本上你在这里做的是将节点移动四分之一圆,如下所示:

在这种情况下,圆的半径为100,在3点钟位置发现0度.另外值得注意的是,UIBezierPath角度以弧度而非度数来度量.要将度数转换为弧度,您可以使用这个简单的公式:float radian = degree * M_PI / 180.0f;其中M_PI是pi.
因此,要创建从点100,200到0,100的路径并将其应用于SKAction您可以执行此操作:
UIBezierPath *path = [UIBezierPath pathWithArcCenter:CGPointMake(100,100), radius:100 startAngle:90.0f * M_PI / 180.0f endAngle:180.0f * M_PI / 180.0f clockwise:NO];
SKAction *moveInArc = [SKAction followPath:path.CGPath duration:1];
Run Code Online (Sandbox Code Playgroud)
在移动到弧中间的不同位置方面,您可以SKAction将关键字与a 关联,NSDictionary然后在它们完成之前删除它们以终止操作.
点击时进行电弧放电需要覆盖touchesBegan:withEvent:.
希望这能让你开始走上正确的道路.(双关打算...)
编辑:
好的,所以上面的代码定义了一个像圆形切片一样绘制圆形切片的路径,但是,你可以使用这个UIBezierPath方法
- (void)addCurveToPoint:(CGPoint)endPoint
controlPoint1:(CGPoint)controlPoint1
controlPoint2:(CGPoint)controlPoint2
Run Code Online (Sandbox Code Playgroud)
要么
- (void)addQuadCurveToPoint:(CGPoint)endPoint
controlPoint:(CGPoint)controlPoint
Run Code Online (Sandbox Code Playgroud)
后者可能是最适合你的.这是文档的链接.
您的代码看起来像这样:
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:node.positon];
[path addQuadCurveToPoint:destination controlPoint:control];
SKAction *move = [SKAction followPath:path.CGPath duration:1];
[node runAction:move];
Run Code Online (Sandbox Code Playgroud)
要计算控制点,你可以试验直到你得到所需的效果(也许是一个直角三角形,其中从节点到目的地的线是斜边,控制点是直角的点),或者这里是二次曲线的简要说明.