2015-01-14 5 views
0

У меня есть этот метод прикосновения, который заставляет спрайт прыгать. Если я продолжаю нажимать спрайт, он постоянно растет. Я хочу остановить это, но мне также нужно уметь и прыгать через другой объект примерно через 0,8 секунды.У меня есть метод прикосновений, но я не хочу, чтобы спрайт прыгнул снова, если коснулся дважды?

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 
    /* Called when a touch begins */ 
    if moving.speed > 0 { 
     for touch: AnyObject in touches { 
      let location = touch.locationInNode(self) 

      hurdie.physicsBody?.velocity = CGVectorMake(0, 0) 
      hurdie.physicsBody?.applyImpulse(CGVectorMake(0, 30.0)) 


     } 

ответ

0

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

var shouldJump = true; 

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 
    /* Called when a touch begins */ 
    if moving.speed > 0 { 
     for touch: AnyObject in touches { 
      let location = touch.locationInNode(self) 
      if (shouldJump){ 
       hurdie.physicsBody?.velocity = CGVectorMake(0, 0) 
       hurdie.physicsBody?.applyImpulse(CGVectorMake(0, 30.0)) 
       shouldJump = false; 
       var timer = NSTimer.scheduledTimerWithTimeInterval(0.8, target: self, selector: Selector("updateState"), userInfo: nil, repeats: false) 
      } 

     } 
func updateState() { 
    shouldJump = true; 
    } 
+0

Стефан, тх nks миллион. Отлично! –

0

При первом обнаружении касания установите флаг, который означает, что прикосновения отключены от прыжка и запускают таймер. Когда срабатывает таймер, вы можете сбросить флаг. В ваших прикосновениях метод начал проверять флаг перед тем, как разрешить новый прыжок.

Обратите внимание, что если игра имеет паузу, вам необходимо подумать о том, как таймер взаимодействует с ней.

0

Используйте переменную отбросить штрихи:

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 
/* Called when a touch begins */ 
    if touchEnabled { 
     if moving.speed > 0 { 
      for touch: AnyObject in touches { 
       let location = touch.locationInNode(self) 

       hurdie.physicsBody?.velocity = CGVectorMake(0, 0) 
       hurdie.physicsBody?.applyImpulse(CGVectorMake(0, 30.0)) 
       touchEnabled = false 
     } 
    } 
} 

И установлено верно в вашей update функции, вы можете проверить, если ваш спрайт отдыхает:

if hurdie.physicsBody?.resting { 
    touchEnabled = true 
} 
Смежные вопросы