你不應該當一個鍵被濫用鍵盤重複以重複運行的代碼。相反,請記住自己使用keyDown
和keyUp
自己按下哪些按鍵。
要做到這一點,最簡單的方法是使用實例變量:
var leftPressed = false
var rightPressed = false
var upPressed = false
var downPressed = false
你也可以使用一個enum
,關鍵代碼的陣列,或任何最適合您的應用程序。
在keyDown
和keyUp
,設置或清除鍵按下標誌。您可以使用switch
/case
更加簡練使這些功能,如果你import Carbon.HIToolbox
,你就會有一些可用於虛擬鍵碼常量:
override func keyDown(with event: NSEvent) {
switch Int(event.keyCode) {
case kVK_LeftArrow:
leftPressed = true
case kVK_RightArrow:
rightPressed = true
case kVK_UpArrow:
upPressed = true
case kVK_DownArrow:
downPressed = true
default:
break
}
}
override func keyUp(with event: NSEvent) {
switch Int(event.keyCode) {
case kVK_LeftArrow:
leftPressed = false
case kVK_RightArrow:
rightPressed = false
case kVK_UpArrow:
upPressed = false
case kVK_DownArrow:
downPressed = false
default:
break
}
}
然後,在你update
方法更新播放器的位置:
var lastUpdate: TimeInterval!
func update(currentTime: TimeInterval) {
defer { lastUpdate = currentTime }
guard lastUpdate != nil else {
return
}
let dt = currentTime - lastUpdate
guard dt < 1 else {
return //so nothing "jumps" when the the game is unpaused
}
if leftPressed {
player.position.x -= 10 * dt
}
if rightPressed {
player.position.x += 10 * dt
}
if upPressed {
player.position.y -= 10 * dt
}
if downPressed {
player.position.y += 10 * dt
}
}
好的,這一切都有道理,但什麼是kVK_Arrow?這是從Carbon.HIToolbox導入的東西嗎? – Elijah
@Elijah Yep; Carbon包含每個鍵的虛擬鍵碼常量。見http://stackoverflow.com/questions/3202629/where-can-i-find-a-list-of-mac-virtual-key-codes – NobodyNada
這就是我的想法,但它仍然給我一個錯誤後,我導入它。 – Elijah