当精灵到达路径的末尾时,如何从 SpriteKit 重复动作中获取回调?

Posted

技术标签:

【中文标题】当精灵到达路径的末尾时,如何从 SpriteKit 重复动作中获取回调?【英文标题】:How do I get a callback from a SpriteKit repeating action when the sprite reaches the end of a path? 【发布时间】:2013-10-29 22:45:55 【问题描述】:

我以这种方式创建了我的SKAction

unicornAction = [SKAction followPath:mypath asOffset:NO orientToPath:YES duration:0.1];

并将其添加到我的SKSprite:

[sprite runAction:[SKAction repeatActionForever:unicornAction] withKey:@"move"];

我这样做是为了让我可以在精灵穿过路径的运动中随时调整速度。

当我的精灵到达路径的尽头时,我需要一个回调,以便我可以删除精灵。我怎样才能得到这样的回调?

另外,有没有更好的方法使用SKAction 来做我想做的事情,同时允许我在动作运行期间的任何地方改变速度?

【问题讨论】:

【参考方案1】:

您可以在序列末尾使用带有 runBlock 或 performSelector 的序列:

SKAction* sequence = [SKAction sequence:@[unicornAction, [SKAction runBlock:^
    // code at end of path goes here...
]];

你也可以使用

[sprite runAction:sequence withKey:@"follow path"];

然后通过按键获取动作:

SKAction* sequence = [sprite actionForKey:@"follow path"];

【讨论】:

这比我想象的要好得多。谢谢!【参考方案2】:

创建第二个 runBlock: 动作,在动作完成时执行您希望它执行的任何操作,然后使用您的 followPath 和块完成动作创建一个序列:动作。如果您不想使用块,还有 performSelector:onTarget: 操作。

https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKAction_Ref/Reference/Reference.html

【讨论】:

以上是关于当精灵到达路径的末尾时,如何从 SpriteKit 重复动作中获取回调?的主要内容,如果未能解决你的问题,请参考以下文章

如何避免 SpriteKit 中的平滑效果?

SpriteKit - 在 SKAction 期间精灵的正确位置

如何向滑动 SpriteKit 的方向投掷精灵

如何在 SpriteKit 中从 Web API 加载精灵表

如何在 Swift 和 SpriteKit 中使用 UISwipeGestureRecognizer 而不是 touchesMoved?

使用 SpriteKit 如何以随机但一致的速度将精灵节点移动到一个点