在SpriteKit中使用Swift的NSTimer能够构建但崩溃

时间:2015-03-24 00:25:32

标签: swift xcode6 nstimer

我正在尝试创建一个新的NSTimer对象,只需将计数器增加1秒(计算我的游戏的生命周期),现在我已经看到了有关如何解决这个问题的演示和示例,并且已经完成了相同的操作事情,但项目继续失败。有什么建议吗?
这是错误消息: 无法识别的选择器发送到实例0x7a83c7d0

import SpriteKit


var timerObject = NSTimer()
var count = 0
let timer = SKLabelNode(text: "0")


class GameScene: SKScene , SKPhysicsContactDelegate {
    override func didMoveToView(view: SKView) {

    timerObject = NSTimer.scheduledTimerWithTimeInterval( 1 , target: self  , selector: Selector("result"), userInfo: nil, repeats: true)

    func result(){
         count++
         timer.text = String(count)

    }

我还写了函数"结果"因此仍然崩溃

func result() {
    count+= 0
    timer.text = "\(count)"
}

2 个答案:

答案 0 :(得分:0)

您的NSTimer回调标记错误。试试这个:

func result(aTimer: NSTimer!) {
    count+= 0
    timer.text = "\(count)"
}

我相信你还需要将选择器作为“result:”传递:

timerObject = NSTimer.scheduledTimerWithTimeInterval( 1 , target: self  , selector: "result:", userInfo: nil, repeats: true)

答案 1 :(得分:0)

我想出了所有遇到同样问题的人的答案,就是我遇到了错误信息:无法识别的选择器发送到实例0x7a83c7d0实际上解决方案很简单,我已经在viewDidLoad中初始化了我的timerObject对象错误表明方法结果不是gameScene的一部分 只需在viewDidLoad下移动您选择的选择器功能,它就可以正常工作

class GameScene: SKScene , SKPhysicsContactDelegate {


var timer = NSTimer()
var count = 0
let lableTimer = SKLabelNode(text: "0")

override func didMoveToView(view: SKView) {

     timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "result", userInfo: nil, repeats: true)

    lableTimer.position = timerPosition
    lableTimer.fontSize = 40


    self.addChild(lableTimer)

 }


func result(){
    count++
    lableTimer.text = String(count)
}

此外,我已将所有初始变量移到GameScene类中,而不是最重要的。