我正在创建一个OS X Swift SpriteKit游戏,但对于编程来说还是一个新手。我正在尝试仅在按下键时运行keyDown函数一次。目前,如果按下某个键,它会快速重复该代码。我试图让它能够为我的游戏角色播放动画一次(所以它将永远重复,直到按键不再按下),因为在keyUp函数上它将返回播放空闲动画。它不是播放正在运行的动画,而是在第一个纹理上冻结,因为代码重复得太快而没有留出时间来播放完整的动画。是否有可能只触发一次动作?
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)))
}
答案 0 :(得分:1)
NSEvent
有isARepeat
property。只需确保您的代码仅在此属性为false时运行。例如。将此行放在函数的开头:
guard !theEvent.isARepeat else { return }