キーが押されたときにコードを繰り返し実行するために、キーボードリピートを乱用することは想定されていません。代わりに、keyDown
とkeyUp
を使用して、どのキーが押されたのかを自分自身で把握してください。
これを行う最も簡単な方法は、インスタンス変数である:
var leftPressed = false
var rightPressed = false
var upPressed = false
var downPressed = false
あなたはまたenum
、キーコードの配列、または任意のアプリの最高の作品を使用することができます。
keyDown
およびkeyUp
には、キー押下フラグを設定またはクリアします。あなたのupdate
方法でプレーヤーの位置を更新し、その後
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
}
}
を
:あなたは
switch
/
case
を使用してはるかに簡潔これらの関数を作ることができ、あなた
import Carbon.HIToolbox
場合は、仮想キーコードのためのいくつかの定数が利用できる必要があります:
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