码迷,mamicode.com
首页 > 其他好文 > 详细

Xcode的playground中对于SpriteKit物理对象的更新为何无效

时间:2016-04-26 19:43:42      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;)


为了便于SpriteKit中物理行为的调试,我们可以借助于Xcode的playground的强大机制.我们只需要随时修改我们的代码,就可以在观察窗中立即观察到物理对象的变化.

现在为了给眼睛观察一定延时时间,我们写一个延时方法:

public func delay(seconds seconds:Double,completion:()->()){
    let popTime = dispatch_time(DISPATCH_TIME_NOW, Int64(Double(NSEC_PER_SEC) * seconds))
    dispatch_after(popTime, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0)){
        completion()
    }
}

然后扩展SKScene类,添加2个新的实例方法:

extension SKScene{

    func switchWindDirection(timer:NSTimer){
        blowingRight = !blowingRight
        windForce = CGVector(dx: blowingRight ? 50:-50, dy: 0)
    }

    func windWithTimer(timer:NSTimer){
        scene!.enumerateChildNodesWithName("sand"){node,_ in
            node.physicsBody!.applyForce(windForce)
        }

        scene!.enumerateChildNodesWithName("shape"){node,_ in
            node.physicsBody!.applyForce(windForce)
        }
    }
}

我们随着时间左右摇摆场景中的物理对象,模拟大风吹过的效果.

我们还需要找地方调用这两个方法,首先尝试在delay中调用:

delay(seconds: 2.0){

    NSTimer.scheduledTimerWithTimeInterval(0.05, target: scene, selector: #selector(SKScene.windWithTimer(_:)), userInfo: nil, repeats: true)
    NSTimer.scheduledTimerWithTimeInterval(3.0, target: scene, selector: #selector(SKScene.switchWindDirection(_:)), userInfo: nil, repeats: true)

    scene.physicsWorld.gravity = CGVector(dx: 0, dy: -9.8)
}

但是实际上playground中显示并没有调用其中对应的方法,后将NSTimer的调用移到delay之外调用却可以完成效果,这是为何?

原因很简单,delay中的延时调用是在主队列中执行的,应该放在main队列中执行,我们重新写一个delayInMain方法:

public func delayInMain(seconds seconds:Double,completion:()->()){
    let popTime = dispatch_time(DISPATCH_TIME_NOW, Int64(Double(NSEC_PER_SEC) * seconds))
    dispatch_after(popTime, dispatch_get_main_queue()){
        completion()
    }
}

然后在其中调用NSTimer的定时器方法就可以了:

技术分享

Xcode的playground中对于SpriteKit物理对象的更新为何无效

标签:

原文地址:http://blog.csdn.net/mydo/article/details/51249155

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!