NSTimer 不会触发对象中的函数

NSTimer won't trigger function in object

我正在做一个简单的游戏,每一秒,我都需要玩家失去食物"point"。目前,我有这样的声明。

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

而且我再也没有收到计时器的消息,据我所知,它对应用程序的其余部分没有影响。我的Playerclass如下

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 完全不受影响。对我的问题的任何帮助都会非常有帮助。

提前致谢!

您需要更改选择器。现在,您实际上会在创建计时器时调用方法 foodLoss,并使用 return 值 (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")
}