【问题标题】:Get touch location of screen in a spritekit game在 spritekit 游戏中获取屏幕的触摸位置
【发布时间】:2018-05-25 11:52:57
【问题描述】:

我有一个精灵套件游戏,我想知道用户是否触摸了屏幕的左侧、右侧或中间 (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")
        }
    }
}

【问题讨论】:

  • @vacawama,你把 ViewsNodes/Scenes 混淆了

标签: ios swift sprite-kit uitouch


【解决方案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")
        }
    }
}

【讨论】:

  • 这不考虑相机向右滚动。我已尝试将相机 x 位置添加到仍然无法正常工作的触摸位置
  • 如果可能的话,我想在 gameController.swift 中这样做。然后当我添加更多关卡时,我也可以从那里使用它
  • 您在提问时需要澄清这种行为,请使用touch.location(in:self.camera)
  • 我确实在问题中提到它是一个横向滚动条,但你 self.camera 效果很好,谢谢 :)
  • @RachelDockter,创建横向卷轴的方法有很多,假设您如何创建横向卷轴对我来说是愚蠢的。例如。我可以移动场景以创建滚动效果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-10
相关资源
最近更新 更多