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)
而且我再也没有收到计时器的消息,据我所知,它对应用程序的其余部分没有影响。我的Player
class如下
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")
}
我正在做一个简单的游戏,每一秒,我都需要玩家失去食物"point"。目前,我有这样的声明。
var timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: player, selector: Selector(player.foodLoss()), userInfo: nil, repeats: true)
而且我再也没有收到计时器的消息,据我所知,它对应用程序的其余部分没有影响。我的Player
class如下
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")
}