2016-06-25 5 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

NSEventisARepeat property있다. 이 속성이 false 일 때만 코드가 실행되도록하십시오. 예 : 이 줄을 함수의 시작 부분에 넣으면 다음과 같습니다.

guard !theEvent.isARepeat else { return } 
관련 문제