2016-01-10 2 views
1

Я делаю простую игру, и каждую секунду мне нужен игрок, чтобы потерять «точку» пищи. В настоящее время у меня есть такая декларация.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

Вы никогда не называют 'timer' в своем классе ... как ожидают его вычитать что-нибудь? –

ответ

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") 
} 
Смежные вопросы