Swift 同时运行2个操作?游戏冻结?
好吧,我在这里尝试了一些不同的方法,但没有任何效果。 我有十几个sprite节点,每个节点都需要:Swift 同时运行2个操作?游戏冻结?,swift,sprite-kit,Swift,Sprite Kit,好吧,我在这里尝试了一些不同的方法,但没有任何效果。 我有十几个sprite节点,每个节点都需要: 耽搁 永远重复这句话: a。向下移动屏幕,同时缩放到更大的尺寸(即这两种情况同时发生) b。然后向上移动屏幕,同时缩小到原始大小(这些也同时发生) 通常情况下,我认为这将与序列一起工作,并将缩放和移动动作分为两个块,但它没有起作用。下面获取节点执行一次: block1.runAction(SKAction.runBlock({ self.block1.runAction(
block1.runAction(SKAction.runBlock({
self.block1.runAction(moveDownLeft)
self.block1.runAction(scaleBlock)
let nodelay = 0 * Double(NSEC_PER_SEC)
let notime = dispatch_time(DISPATCH_TIME_NOW, Int64(nodelay))
//during delay
dispatch_after(notime, dispatch_get_main_queue()) {
//after delay
self.block1.runAction(moveUpLeft)
self.block1.runAction(scaleBlockBack)
}
})
)
但是,当我介绍了repeatActionForever
时,整个游戏都冻结了
为什么我不能永远循环现有代码?如何同时运行这两个操作?
并行运行多个SKActionsSKAction.group(:)
会造成延迟SKAction.waitForDuration(:)
使用这些工具的组合来产生你想要的效果。您的
呼叫后调度是问题所在,尽管我不确定具体是什么。您遇到的最大问题是阻塞不能等待。它只是运行代码。所以现在发生的是,你正在开始一些动作,它到达了块的末尾,因为你在做“永远重复”,所以它会再次调用它,即使这些动作还没有完成。这将导致尽可能快地调用该块
我不完全确定您希望延迟到哪里,但类似的事情应该会奏效,或者让您朝着正确的方向开始
let delay = SKAction.waitForDuration(4.0) //whatever your delay is
let scaleDownGroup = SKAction.group([moveDownLeft, scaleBlock])
let scaleUpGroup = SKAction.group([moveUpLeft, scaleBlockBack])
let sequence = SKAction.sequence([scaleDownGroup, delay, scaleUpGroup])
let repeat = SKAction.repeatActionForever(sequence)
self.block1.runAction(repeat)
希望这能有所帮助。我想SpriteKit的runAction
和runBlock
不是自动异步的?但我不知道;我还没有真正编写过SK应用程序。