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

时间:2017-01-05 23:23:55

标签: 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在循环中并且永远不会停止。这行代码永远不会被读取。任何想法如何检测组中的一个动作?

1 个答案:

答案 0 :(得分:3)

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

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])