swift:检测哪个 skaction 在组中停止

标签 swift sprite-kit swift2 skaction

我有一个节点熊,上面有两个skactions(在一个组中)。 Action bearmove 是循环的,而 moveUp 则不是,moveUP 应该只发生一次。

let moveUp=SKAction.moveTo(y:50,duration:1.0)
let bearAnimate=[SKTexture(imageNamed:"image1"),SKTexture(imageNamed:"image2"),SKTexture(imageNamed:"image3"),SKTexture(imageNamed:"image2")]

let bearmove=SKAction.animate(with: bearAnimate,timePerFrame:0.3)
let bearRep=SKAction.repeatForever(bearmove)

 let bearRun = SKAction.group([moveUp, bearRep])
 bear.run(bearRun)

我想知道 moveUp 何时完成/停止运行。我尝试过:

if !bear.hasActions(){
   print("stoped moving")
}

但是由于 bearAnimate 处于循环状态并且永远不会停止。这行代码永远不会被读取。有什么想法如何检测一组中的某个操作吗?

最佳答案

您可以创建另一个操作来处​​理移动后发生的情况,然后按顺序运行这些操作。

let afterMoveHandler = SKAction.runBlock({
    // Your code here
})

let moveSequence = SKAction.sequence([moveUp, afterMoveHandler])
let bearRun = SKAction.group([moveSequence, bearRep])

如果您希望 SKAction 的扩展来完成您正在寻找的任务,请考虑以下事项:
(代码为 Swift 3)

extension SKAction
{
    static func run(action:SKAction,completion:()->()) -> SKAction
    {
       return SKAction.sequence([action, SKAction.run(completion)]
    }

}

用法:

let moveUpEvent = SKAction.run(action:moveUp){/*do something here*/}
let bearRun = SKAction.group([moveUpEvent , bearRep])

关于swift:检测哪个 skaction 在组中停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41496482/

相关文章:

ios - 如何在使用 Swift 关闭 ViewController 期间将值从 ViewController B 传递到 ViewController A?

ios - 如何使用 CGContext 获取像素的 RGB 值?

ios - 来自 JSON 的 SwiftUI Picker 数据未显示

crash - XCode 7.2 在协议(protocol)扩展实现功能不正确时崩溃

ios - 如何让 'removeFromParent()'多次工作?

swift - Sprite Kit - 有时球会从屏幕上消失?

swift - 如何在转到角度之前将 SKSpriteNode 旋转 360°

ios - 如何给屏幕边缘一个物理体

ios - 如何创建面向协议(protocol)的通用服务?

ios - Swift 2 函数补全