Ios 检测SKAction是否在运行中完成,Swift
我想在操作运行后更改变量的值,而不是在操作运行期间。这是我的代码:Ios 检测SKAction是否在运行中完成,Swift,ios,swift,sprite-kit,Ios,Swift,Sprite Kit,我想在操作运行后更改变量的值,而不是在操作运行期间。这是我的代码: override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) { if gameNotStarted { if firePosition.x != 320 || firePosition.y > 280 { fire.runAction(fireButtonRe
override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) {
if gameNotStarted {
if firePosition.x != 320 || firePosition.y > 280 {
fire.runAction(fireButtonReturn)
iapButton.runAction(iapButtonReturn)
aboutButton.runAction(abtButtonReturn)
if fire.hasActions() == false {
println("has no actions")
firePosition.x = 320
firePosition.y = 280
}
}
}
}
override func touchesend(touchs:Set,withEvent-event:UIEvent){
如果游戏没有开始{
如果firePosition.x!=320 | | firePosition.y>280{
fire.runAction(fireButtonReturn)
运行操作(iapButtonReturn)
aboutButton.runAction(abtButtonReturn)
如果fire.hasActions()=false{
println(“无操作”)
火势x=320
火势y=280
}
}
}
}
我正在运行的三个操作的持续时间完全相同,因此我只需要一个操作来检查它们是否已完成运行。在它们完成运行后,我想更改firePosition.x
和firePosition.y
的值。
非常重要的一点是,火力位置值在动作运行后完全改变,而绝对不是在动作运行前改变
但是,对于我当前的代码,我从未根据结果和控制台运行if fire.hasActions()…部分。
我发现了类似的问题,它们在obj-c中。
谢谢您的帮助。您应该使用完成处理程序:
fire.runAction(fireButtonReturn,
completion: {
println("has no actions")
firePosition.x = 320
firePosition.y = 280
}
)
解决方案的问题是,操作是通过runAction调用启动的,但随后在后台运行,同时主线程继续执行(因此在操作完成之前到达它)。您应该使用完成处理程序来处理您的问题:
//Run the action
iapButton.runAction(iapButtonReturn,
//After action is done, just call the completion-handler.
completion: {
firePosition.x = 320
firePosition.y = 280
}
)
或者您可以使用SKAction.sequence
并将您的操作添加到SKAction.block
中:
var block = SKAction.runBlock({
fire.runAction(fireButtonReturn)
iapButton.runAction(iapButtonReturn)
aboutButton.runAction(abtButtonReturn)
})
var finish = SKAction.runBlock({
firePosition.x = 320
firePosition.y = 280
})
var sequence = SKAction.sequence([block, SKAction.waitForDuration(yourWaitDuration), finish])
self.runAction(sequence)
您可以使用它:
if myShip.actionForKeyIsRunning("swipedLeft") {
print("swipe in action..")
}
谢谢。如果我想在swift中撤销一个动作,我会怎么做?
if myShip.actionForKeyIsRunning("swipedLeft") {
print("swipe in action..")
}