NSTimer不会触发对象中的函数

时间:2016-01-10 14:07:47

标签: object swift2 nstimer

我正在制作一个简单的游戏,每一秒,我都需要玩家失去食物“点”。目前,我有这样的声明。

var timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: player, selector: Selector(player.foodLoss()), userInfo: nil, repeats: true)

我再也没有从计时器中听到过,据我所知,它对应用程序的其余部分没有任何影响。我的Player课程如下

class Player: Character {
    var food = 100
    init(startingHealth: Int = 100, startingFood: Int = 100) {
        super.init(imageNamed: "Player", entityName: "Player")
        food = startingFood
        sprite = SKSpriteNode(imageNamed: "Player")
    }
    func adjustFood(amountToAdjustBy adjustAmount: Int) -> Bool{
        if food + adjustAmount <= 100 {
            food += adjustAmount
            return true
        } else {
            return false
        }
    }
    func foodLoss() {
        food -= 1
        print("food lost")
    }
}

运行代码时没有错误。唯一发生的事情是player.food完全不受影响。对我的问题的任何帮助都会非常有帮助。

提前致谢!

1 个答案:

答案 0 :(得分:1)

您需要更改选择器。现在,您实际上在创建计时器时调用方法foodLoss,并使用返回值(Void)作为计时器应始终调用的方法。因此它不会做任何事情。

要解决此问题,您需要提供不同的选择器。例如,使用Selector("foodLoss")代替:

var timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: player, selector: Selector("foodLoss"), userInfo: nil, repeats: true)

要完成这项工作,您可能需要将foodLoss功能标记为@objc

@objc func foodLoss() {
    food -= 1
    print("food lost")
}