2015-08-22 5 views
-2

У меня есть стрельба персонажа, и я хочу, чтобы он снимал только при касании экрана, я продолжаю получать эту ошибку. «GameScene» не имеет члена с именем «stimer» вот кодКак остановить NSTimer

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { 
    /* Called when a touch begins */ 

    for touch: AnyObject in touches { 
     var stimer = NSTimer.scheduledTimerWithTimeInterval(0.5, target: self, selector: Selector("spawnShot"), userInfo: nil, repeats: true) 
     let location = touch.locationInNode(self) 
     player.position.x = location.x 

    } 
} 
    override func touchesEnded(touches: Set<NSObject>, withEvent: UIEvent){ 
    for touch: AnyObject in touches{ 
     if self.stimer.valid{ 

      self.timer.invalidate() 
      self.timer = nil 
     } 

    } 
} 

ответ

1

Ваша проблема заключается в том, что любая переменная или константа, объявленная внутри метода доступен только в этом методе.

Я думаю, что было бы решить эту проблему, если вы объявили stimer вне touchesBegan в var stimer:NSTimer!, а затем просто передайте свои аргументы, как вы делали внутри touchesBegan. Тогда вам, вероятно, не понадобится self. перед именем таймера.

Кроме того, похоже, что вы признаете недействительным другой таймер, чем вы проверяете достоверность? Это может быть другой проблемой, я не знаю, специально ли вы сделали это.

0

Вы должны начать свой таймер в методе GameScene init или в любой другой начальной функции, например:

var gameLoop:NSTimer? 
var hitByEnemy:Bool = false 

// you need to implement this method otherwise Xcode will throw an error 
required init?(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 

override init(size: CGSize) { 
    super.init(size: size) 
    self.gameLoop = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "gameLoopTimerTicked:", userInfo: nil, repeats: true) 
} 

, то вам нужно создать метод, который NSTimer будет вызывать, когда определенный интервал времени прошло:

func gameLoopTimerTicked(timer:NSTimer){ 
    if self.hitByEnemy { 

     self.gameLoop?.invalidate() 
    } 
} 

и в другой функции вы должны определить, был ли ваш персонаж поражен врагом или любым другим событием, которое должно остановить ваш таймер.

Смежные вопросы