我正在制作一个简单的游戏,每一秒,我都需要玩家失去食物“点”。目前,我有这样的声明。
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
完全不受影响。对我的问题的任何帮助都会非常有帮助。
提前致谢!
答案 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")
}