我创建了一个简单的动作序列,它将对精灵对象执行一些任务,但我还想在序列中进行一个自定义动作,以特定的时间间隔间隔打印一定数量的秒数(例如,以1秒的间隔打印" hello world" 10秒钟)。我尝试创建一个返回skaction的方法,但是没有用,并且当第一次调用序列而不是前一个操作完成后,操作就会运行。这是我到目前为止所得到的
let printAction = SKAction.customActionWithDuration(10) { (SKNode, CGFloat) -> Void in
NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("printit"), userInfo: nil, repeats: false)
}
sprite.runAction(SKAction.repeatActionForever(SKAction.sequence([printAction,scale,printAction])))
func printit() {
print("hello world")
}
答案 0 :(得分:0)
您正在组合两种方法,可以单独解决您的问题,但您正在进行的组合将无法正常工作。 (您将从一个动作中触发多个1秒计时器,该动作将以无法控制的速度将您的捕获块调用不可预测的次数。)
使用SKAction的解决方案:
let printMessage = SKAction.runBlock(){ self.printIt() }
let wait = SKAction.waitwaitForDuration(1)
let printCycle = SKAction.sequence([printMessage, wait])
self.runAction(SKAction.repeatAction(printCycle, count:10))
func printIt()
{
print("hello world")
}
使用NSTimer的解决方案:
for time in 0..<10
{
NSTimer.scheduledTimerWithTimeInterval(NSTimeInterval(Double(time)),
target: self, selector: Selector("printIt:"),
userInfo: nil, repeats: false)
}
func printIt(_ : NSTimer)
{
print("hello world")
}
在Sprite Kit环境中,我建议您不要混合使用框架并使用SKAction方法。通过将所有内容链接到您的SKScene和/或SKView,可以更轻松地控制/清理游戏环境