在 spritekit 游戏中获取屏幕的触摸位置

Get touch location of screen in a spritekit game

我有一个 sprite kit 游戏,我想知道用户是否触摸了屏幕的左侧、右侧或中间 (25/50/25)

当我触摸屏幕最左侧的那一刻,它说我触摸了 x 轴上的 -450,而它应该是 0。我假设它得到了我相对于场景的触摸位置并且作为锚点点从右边 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")
        }
    }
}

您几乎成功了,只是考虑负数。

如果你不知道,0 是 SKScene 默认的中心。这是因为默认锚点是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")
        }
    }
}