2017-03-09 11 views
2

Xcodeでは、スプライトキットにはどのような種類の矢印キーが組み込まれていますか?私は現在、通常のスウィフトキーコードを使用しており、キーが押されると遅延があります。これにより、私のゲームコントロールが難しくなります。SpriteKitの矢印キー

これは私が現在矢印キーを読み取っている方法です。

override func keyDown(with event: NSEvent) { 

    let keycode = event.keyCode 

    if(keycode == 125)//up 

    { 
     player.position.y -= 10 
    } 

    else if(keycode == 126)//down 

    { 
     player.position.y += 10 
    } 

    if(keycode == 124)//right 

    { 
     player.position.x += 10 
    } 

    else if(keycode == 123)//left 

    { 
     player.position.x -= 10 

    } 

は、私が知っている、これは愚かな質問ですが、迅速に私の新しい、私はこの質問への任意の他の回答を見つけることができません。

答えて

1

キーが押されたときにコードを繰り返し実行するために、キーボードリピートを乱用することは想定されていません。代わりに、keyDownkeyUpを使用して、どのキーが押されたのかを自分自身で把握してください。

これを行う最も簡単な方法は、インスタンス変数である:

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 
    } 
} 
+0

これはすべて意味がありますが、kVK_Arrowとは何ですか?それはCarbon.HIToolboxインポートからのものですか? – Elijah

+0

@Elijah Yep; Carbonには、各キーの仮想キーコード定数が含まれています。参照してくださいhttp://stackoverflow.com/questions/3202629/where-can-i-find-a-list-of-mac-virtual-key-codes – NobodyNada

+0

それは私が思ったことは、それはまだ私にエラーを与えていた後それを輸入した。 – Elijah

関連する問題