2016-06-25 2 views
1

Я создаю игру OS X Swift SpriteKit, но я все еще довольно новичок в программировании. Я пытаюсь запустить функцию keyDown только один раз, пока ключ удерживается. В настоящее время, если ключ удерживается, он быстро повторяет код. Я пытаюсь сделать так, чтобы один раз играть в анимацию для моего игрового персонажа (так что он будет повторяться навсегда, пока ключ больше не будет нажат), потому что в функции keyUp он вернется к воспроизведению простоя анимации. Вместо того, чтобы воспроизводить запущенную анимацию, она просто зависает на первой текстуре, потому что код повторяется слишком быстро, не оставляя время для полной анимации. Можно ли запускать действие только один раз?Запустить функцию KeyDown только один раз

override func keyDown(theEvent: NSEvent) { 

if theEvent.keyCode == 124 { 
     //Move right 
     runningRight = true 
     runRightOrLeft(player) 
     player.runAction(SKAction.repeatActionForever(SKAction.animateWithTextures(RunTextures, timePerFrame: 0.1))) 

     } 
} 

override func keyUp(theEvent: NSEvent) { 
    //Go back to idle animation 
    player.runAction(SKAction.repeatActionForever(SKAction.animateWithTextures(IdleTextures, timePerFrame: 0.1))) 

} 

ответ

1

Существует isARepeat property вашего NSEvent. Просто убедитесь, что ваш код работает только тогда, когда это свойство является ложным. Например. поставив эту линию в начале вашей функции:

guard !theEvent.isARepeat else { return } 
Смежные вопросы