func RunAfterDelay(delay: NSTimeInterval, block: dispatch_block_t) {
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay * Double(NSEC_PER_SEC)))
dispatch_after(time, dispatch_get_main_queue(), block)
}
在我的游戏场景的辅助类中调用此方法。我正在关注TUT,是的,我尝试在当前项目中实现辅助类,我是编程新手。我也对GCD的想法不熟悉,我已经阅读了文档,并且知道它有如此多的用途......
在我的游戏场景中,它在这里使用:
RunAfterDelay(RandomDouble(min: minDelay, max: maxDelay)) { [unowned self] in
self.createEnemy()
它也在同一场景中使用:
dispatch_async(dispatch_get_main_queue()) { [unowned self] in
// if(self.backgroundMusic.playing){
我找到了声音,BG音乐和声音效果的解决方案,通过使用枚举,案例和公共函数创建一个全局swift文件来处理音乐等。看起来这样我相信Swift的每个人都遇到过这个:RW tuts
public class SKTAudio {
public var backgroundMusicPlayer: AVAudioPlayer?
public var soundEffectPlayer: AVAudioPlayer?
public class func sharedInstance() -> SKTAudio {
return SKTAudioInstance
如果有更好的选择,我正在寻找一种不同的方法,因为它在几次运行后正在耗尽我的CPU,并且变得非常慢。这是一个不同的问题。我更关心的是寻找比列出的方法更好的方法。
这是一个利用SpriteKit和UIKit的游戏(出于UI的原因)我离开了,我现在正严格使用SpriteKit。
答案 0 :(得分:1)
为什么不在游戏场景中使用计时器来生成东西呢?或者甚至更好,您可以使用update
函数来执行基于时间的游戏逻辑。这个答案有一个很好的解释:SpriteKit's Update Function: time vs. framerate
这些代码段并没有真正说明为什么会出现CPU问题。你在模拟器上运行吗?您也可以尝试在另一个线程上运行您的块。
func runAfterDelay(selector: Selector, object: AnyObject?, delay: NSTimeInterval) {
let delay = delay * Double(NSEC_PER_SEC)
let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
dispatch_after(time, dispatch_get_main_queue(), {
NSThread.detachNewThreadSelector(selector, toTarget:self, withObject: object)
})
}