Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift Grand Central Dispatch正在寻找一种不同的方法_Swift_Functional Programming_Sprite Kit_Ios9_Grand Central Dispatch - Fatal编程技术网

Swift Grand Central Dispatch正在寻找一种不同的方法

Swift Grand Central Dispatch正在寻找一种不同的方法,swift,functional-programming,sprite-kit,ios9,grand-central-dispatch,Swift,Functional Programming,Sprite Kit,Ios9,Grand Central Dispatch,正在我的游戏场景的助手类中调用此方法。我是跟随一个TUT的,是的,我试图在当前的项目中实现helper类,我是编程新手。我对GCD的概念也很陌生,我读过文档,知道它有很多用途 在我的游戏场景中,这里使用: func RunAfterDelay(delay: NSTimeInterval, block: dispatch_block_t) { let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay * Double(NSEC_PER_

正在我的游戏场景的助手类中调用此方法。我是跟随一个TUT的,是的,我试图在当前的项目中实现helper类,我是编程新手。我对GCD的概念也很陌生,我读过文档,知道它有很多用途

在我的游戏场景中,这里使用:

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)
}
在同一场景中也会用到它:

RunAfterDelay(RandomDouble(min: minDelay, max: maxDelay)) { [unowned self] in
    self.createEnemy()
我已经找到了声音、背景音乐和音效的解决方案,通过创建一个全局swift文件,使用枚举、案例和公共函数来处理音乐等。看起来像这样,我相信每个新加入swift的人都会遇到这样的问题:RW tuts

dispatch_async(dispatch_get_main_queue()) { [unowned self] in
    //   if(self.backgroundMusic.playing){
我正在寻找一种不同的方法,如果有更好的选择,因为它目前正在耗尽我的CPU,在几次运行后,变得非常缓慢。但这是另一个问题。我更关心的是寻找比所列方法更好的方法


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

为什么不在游戏场景中使用计时器来生成东西呢?或者更好的是,您可以使用
update
函数来执行这样基于时间的游戏逻辑。这个答案有一个很好的解释:

这些代码片段并没有真正说明为什么会出现CPU问题。你在模拟器上运行吗?您还可以尝试在另一个线程上运行块

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

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

如果使用GCD,则需要正确处理并发性,就像在所有多线程程序中一样。GCD对于长时间运行的独立计算最有用。这不是一个很好的游戏解决方案。谢谢。非常直截了当。如果我为游戏场景增加一些代码会有帮助吗?同时,我会看看你提供的信息。谢谢你,在做了一些研究之后,你给出了一种不同的方法来执行这个方法。我不是在模拟器上运行的,因为这篇文章现在已经很老了,我想提醒人们不要混合使用UIKIT元素和SpriteKit元素。我的问题是我使用UIKit进行转换,使用手动segue方式和故事板来转换场景。退一步之后,我意识到,尽管你使用了一个视图控制器(GVC),而且它可以有UIKit元素(IAD、游戏中心、导入社交),但在SpriteKit中构建场景更好,至于GCD和我正在用这两种方法测试的游戏。。。。
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)
    })
}