5

WatchOS 3 で SpriteKit を使用する場合、タッチ イベントをどのように処理しますか? SpriteKit ゲームを iOS から移植していますが、以下のコードは機能しません。または、何らかの方法で WKInterfaceController を制御する必要がありますか?

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {}

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?)  {}

override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?) {}

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?)  {}
4

3 に答える 3

8

同じ問題で多くのフラストレーションを感じた後、ジェスチャ認識機能を使用して、そこから位置を計算することにしました。

@IBAction func handleSingleTap(tapGesture: WKTapGestureRecognizer) {
    let location = tapGesture.locationInObject()
    if yourSpriteNodeRect.contains(location) {
        //do stuff
    }
}

ただし、1 つのヒント: ジェスチャ認識エンジンを処理するメソッドを作成するときに見つけた奇妙なバグは、ジェスチャがデフォルトでメソッドに渡されていないことでした。ctrl + ドラッグしてメソッドを作成し、署名を変更してジェスチャを含める必要がありました。署名にジェスチャを含むメソッドを作成すると、Xcode ではジェスチャ認識機能をメソッドにアタッチできません。

タッチを検出するためのより良い方法があるように思われますが、それが今のところ見つけた回避策です。

于 2016-07-28T05:23:47.300 に答える
0

これを行うために、最初に時計のストーリーボードにジェスチャ認識機能を接続しました。を作成IBActionし、SpriteKit シーンでメソッドを呼び出して を渡しましたgesture.locationInObject()。次に、変換用のシーン メソッド内に、いくつかのコードを示します。

let screenBounds = WKInterfaceDevice.current().screenBounds
let newX = ((location.x / screenBounds.width) * self.size.width) - (self.size.width / 2)
let newY = -(((location.y / screenBounds.height) * self.size.height) - (self.size.height / 2))

newX と newY は、シーン内のタッチ座標です。

于 2017-11-24T01:26:56.333 に答える