2015-08-04 4 views
2

Я разрабатываю игру с Sprite Kit, в которой у меня есть узел, названный героем, который уклоняется от приближающихся злодеев. У меня проблема с applyImpulse для действия прыжка, и в этом случае герой может многократно прыгать и летать вместо того, чтобы уклоняться от злодеев. Я использую логическую переменную, чтобы изменить статус со значением таймера, чтобы прыгать только один раз за 3 секунды, но это не работает. Вот мой кодПрименение импульса на узле SpriteKit

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 
    if isGameOver == true { 
     self.restart() 
    } 

    if isstarted { 
     self.runAction(SKAction.playSoundFileNamed("jump.wav", waitForCompletion: false)) 
     for touch: AnyObject in touches{ 
      if jumpon == false { //hero has not jumped 
       let location = touch.locationInNode(self) 
       heroAction() 
       jumpon = true //hero jumped 
      } 
     } 

    } else { 
     isstarted = true 
     hero.stop() 
     hero.armMove() 
     hero.rightLegMove() 
     hero.leftLegMove() 
     treeMove() 
     villanMove() 
     let clickToStartLable = childNodeWithName("clickTostartLable") 
     clickToStartLable?.removeFromParent() 
     addGrass() 
     // star.generateStarWithSpawnTime() 
    } 
} 

func changeJump(){ 
    jumpon = false // hero has landed 
} 

и обновление функция вызывается в каждом втором, а затем changeJump должен быть назван

override func update(currentTime: CFTimeInterval) { 

    if isstarted == true { 
     let pointsLabel = childNodeWithName("pointsLabel") as MLpoints 
     pointsLabel.increment() 
    } 

    if jumpon == true { // checked everyframe that hero jumped 
     jumpingTimer = NSTimer.scheduledTimerWithTimeInterval(3, target: self, selector: "changeJump", userInfo: nil, repeats: true) // changing jump status 
    } 
} 

Как мне обновить свой код, чтобы сделать героя прыгать только один раз в три секунды. Заранее спасибо.

ответ

3

Некоторые мысли ...

  1. Я предлагаю вам использовать SKAction или два вместо NSTimer в Sprite Kit игры. SKAction сек пауза/возобновление соответствующим образом, когда вы приостановить/возобновить сцену и/или вид
  2. Метод update называется ~ 60 раз в секунду, не каждый второй
  3. Проверка состояния прыжка в update не нужно
  4. Кроме того, вы можете проверить, находится ли герой на земле, прежде чем запускать новую последовательность прыжка вместо использования таймера. Игра может расстроить пользователя, если герой находится на земле (и готов прыгать), но таймер продолжает отсчет

и некоторые кода ...

if (!jumping) { 
    jumping = true 
    let wait = SKAction.waitForDuration(3) 
    let leap = SKAction.runBlock({ 
     // Play sound and apply impulse to hero 
     self.jump() 
    }) 
    let action = SKAction.group([leap, wait]) 
    runAction(action) { 
     // This runs only after the action has completed 
     self.jumping = false 
    } 
} 
+0

я предполагаю, что каждый прыжок может продолжаться 2 или 3 секунды, если это не сработало, тогда это мой выбор, спасибо! – AjayPandiyaraj

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