【问题标题】:Grand Central Dispatch Looking for a different approachGrand Central Dispatch 寻找不同的方法
【发布时间】:2016-05-07 17:20:51
【问题描述】:
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){

我通过使用枚举、案例和公共函数来处理音乐等创建一个全局 swift 文件,找到了声音、BG 音乐和音效的解决方案。看起来像这样我相信每个 Swift 新手都遇到过这:RW 啧啧

public class SKTAudio {
public var backgroundMusicPlayer: AVAudioPlayer?
public var soundEffectPlayer: AVAudioPlayer?

public class func sharedInstance() -> SKTAudio {
    return SKTAudioInstance

如果有更好的选择,我正在寻找一种不同的方法,因为它目前正在耗尽我的 CPU,经过几次运行,并且变得非常慢。那是一个不同的问题。我更关心寻找比所列方法更好的方法。

这是一个利用 SpriteKit 和 UIKit 的游戏(出于 UI 原因),我不再使用它,现在我严格使用 SpriteKit。

【问题讨论】:

  • 如果你使用 GCD,你需要正确处理并发,就像在所有多线程程序中一样。 GCD 对于长时间运行的独立计算最有用。对于游戏来说,这不是一个好的解决方案。
  • 谢谢。非常直接。
  • 如果我为游戏场景添加更多代码会有帮助吗?同时我会查看您提供的信息。

标签: swift functional-programming sprite-kit ios9 grand-central-dispatch


【解决方案1】:

为什么不在游戏场景中使用计时器来生成事物?或者更好的是,您可以使用update 函数来执行这样的基于时间的游戏逻辑。这个答案有一个很好的解释:SpriteKit's Update Function: time vs. framerate

那些代码 sn-ps 并没有真正说明为什么会出现 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)
    })
}

【讨论】:

  • 谢谢,在做了一些研究之后,您给出了执行此方法的不同方法。
  • 我没有在模拟器上运行,因为这篇文章现在已经过时了,我想警告人们不要混合 UIKIT 元素和 SpriteKit 元素。我的问题是我使用 UIKit 进行转换,使用手动转场方式和故事板来转换场景。退后一步后,我意识到虽然您确实使用了视图控制器 (GVC),并且它可以包含 UIKit 元素(iAds、Game Center、导入社交),但最好在 SpriteKit 中构建场景,至于 GCD 和游戏我正在测试这两种方法....
猜你喜欢
  • 2012-10-18
  • 2012-05-09
  • 1970-01-01
  • 2011-07-28
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多