bugfix> ios > 投稿

私はスプライトキットゲームを持っていますが、ユーザーが画面の左、右、または中央(25/50/25)をタッチしたかどうかを確認しようとしています

画面の左端をタッチすると、0になるはずのx軸で-450にタッチしていると表示されます。シーンに対するタッチ位置を取得し、アンカーポイントが450ピクセルで始まると仮定します。右、0をタッチすると-450が表示されます。

これはサイドスクローラーであるため、アコーの移動は機能せず、画面のタッチ位置が必要です。

override func touchesBegan(_ touches: Set<UITouch>,with event: UIEvent?){
    var touchLeft : Bool = false
    var touchRight : Bool = false
    var touchMiddle : Bool = false
    for touch in (touches) {
        let location = touch.location(in: self)
        if(location.x < self.size.width/4){
            touchLeft = true
            print("Left")
        } else if(location.x > ((self.size.width/4) * 3)){
            touchRight = true
            print("Right")
        } else {
            touchMiddle = true
            print("Middle")
        }
    }
}

回答 1 件
  • あなたはほとんどそれを持っていました、ただ負の数を考慮してください。

    知らなかった場合、SKSceneのデフォルトは0です。これは、デフォルトのアンカーポイントが0.5,0.5であるためです。

    スクロールの処理にカメラを使用しているため、使用したい touch.location(in: self.camera)  そのため、シーンの場所ではなく、カメラの場所に対して常にタッチします。

    したがって、コードを次のように変更します。

    override func touchesBegan(_ touches: Set<UITouch>,with event: UIEvent?){
        var touchLeft : Bool = false
        var touchRight : Bool = false
        var touchMiddle : Bool = false
        for touch in (touches) {
            let location = touch.location(in: self.camera)
            if(location.x < -self.size.width/4){
                touchLeft = true
                print("Left")
            } else if(location.x > ((self.size.width/4))){
                touchRight = true
                print("Right")
            } else {  //x is between -width / 4 and width / 4
                touchMiddle = true
                print("Middle")
            }
        }
    }
    
    

あなたの答え