使用SpriteKit进行动画,能否绘制一条直线?

8
我想使用苹果的SpriteKit框架从点A(100,50)到点B(250,450)画一条线。
到目前为止,我已经能够使用SKShapeNode并设置其路径属性来绘制这条线。
我想要实现的是绘制这条线时有动画效果。比如说,它应该在2秒内从点A到点B绘制完成。
我查看了SKAction类,但似乎默认情况下没有支持此功能的方法。
以下是我用于创建该线的代码:
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, 100, 50);
CGPathAddLineToPoint(path, NULL, 250.0, 450.0);

SKShapeNode *line = [SKShapeNode node];
line.path = path;
[line setStrokeColor:[UIColor whiteColor]];
[self addChild:line];

有谁能指导我正确的方向吗?


你能重新措辞一下你的问题吗?通常,“给我代码”这样的请求并不被认为是适合在SO上提问的好方式。也许可以详细说明一下你尝试过什么,以及出现了什么问题。 - Jasper Blues
2
大家好,对于关闭投票,留下评论来解释一下是很有帮助的,这样不会让别人感到困惑。 - Jasper Blues
2
感谢Jasper提供的提示。然而,现在我已经自己编写了一个完美运行的解决方案。我继承了SKShapeNode来构建具有起点和终点的线条,然后添加了自定义的SKAction来进行动画绘制。 - E. Lüders
嗯...听起来很像我的答案,但它没有被接受!哈哈 - prototypical
顺便说一下,我认为这是一个很好的问题,除了最初请求代码示例之外。我有一个项目,打算进行一些动画线条绘制,个人甚至想知道是否有更简单的解决方案。 - prototypical
我在我的答案中添加了一个次要选项,我认为它会更简单,因为它只需要一个SKAction。 - prototypical
1个回答

5
您可以使用SKAction中的一些方法来实现您想要的效果:
SKAction performSelector: onTarget:

SKAction waitForDuration:
如果您子类化了SKShapeNode,则可以在SKAction序列中利用这两种方法逐步绘制线条。
当然,您需要手动计算每次迭代要绘制到的新位置,并确定是否完成绘制并结束绘制过程。
如果有其他通过SpriteKit实现此功能的方法,我肯定会感兴趣,但如果没有,这个方法应该可以工作。
抱歉,没有时间编写代码,但是这个逻辑应该可以帮助您实现目标。
更新:
我想到了另一种我认为比较容易的选择。
1.计算原点和终点之间的角度。
2.计算原点和终点之间的距离。
3.创建一个圆形或像素的形状节点。将其视为您要绘制的铅笔尖。
4.旋转形状节点,使其朝向终点 - 使用您计算出的角度。
5.创建一个SKAction,根据您计算的距离缩放您的形状节点的宽度。
6.运行SKAction。
这似乎相对容易,但是如果您想使其更灵活,例如添加颜色参数等,仍然可以子类化。

也许尝试使用两个精灵。一个是你线条的颜色,另一个是背景的颜色。然后将它们水平缩放。 - TJA

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