2017-02-16 82 views
0

我试图用一个ThumbStick和两个按钮来实现用户控制节点。我创建了带有控制元素的独立SKSpriteNode,并覆盖父节点的触摸事件以处理用户触摸。touchesMoved在不移动手指的情况下调用

问题是,当我开始触摸屏时,即使我不移动手指,touchesMoved也会被多次调用。

这里是我的触摸事件代码:

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

    for touch in touches { 
     let touchPoint = touch.location(in: self) 

     touchStatusLabel.text = String(format: "TOUCH BEGAN %@", arguments:[NSStringFromCGPoint(touchPoint)]) 

     if aButton.frame.contains(touchPoint) { 
      NSLog("A BUTTON PRESSED") 
      delegate?.controlInputNode(self, beganTouchButtonWithName: aButton.name!) 
     } 
     else if bButton.frame.contains(touchPoint) { 
      NSLog("B BUTTON PRESSED") 
      delegate?.controlInputNode(self, beganTouchButtonWithName: bButton.name!) 
     } 

     else if touchPoint.x < 0 && touchPoint.y < 0 { 
      NSLog("THUMBSTICK PRESSED") 
      leftThumbStickNode.touchesBegan([touch], with: event) 
      leftThumbStickNode.position = pointByCheckingControlOffset(touchPoint) 
     } 
    } 
} 

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

    for touch in touches { 
     let touchPoint = touch.location(in: self) 
     touchStatusLabel.text = String(format: "TOUCH MOVED %@", arguments:[NSStringFromCGPoint(touchPoint)]) 

     if !aButton.frame.contains(touchPoint) && !bButton.frame.contains(touchPoint) { 
      if touchPoint.x < 0 && touchPoint.y < 0 { 
       leftThumbStickNode.touchesMoved([touch], with: event) 
      } 
     } 
    } 
} 

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

    for touch in touches { 
     let touchPoint = touch.location(in: self) 
     touchStatusLabel.text = String(format: "TOUCH ENDED %@", arguments:[NSStringFromCGPoint(touchPoint)]) 

     let node = atPoint(touchPoint) 

     if node == aButton || node == bButton { 
      delegate?.controlInputNode(self, endTouchButtonWithName: node.name!) 
     } 

     else { 
      leftThumbStickNode.touchesEnded([touch], with: event) 
     } 
    } 
} 

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

    NSLog("TOUCH CANCELED") 

    leftThumbStickNode.touchesCancelled(touches, with: event) 
} 

回答

0

它只出现在调试所以在出现这个问题,我认为这是一些调试问题

0

您可以尝试比较翻译,如果一切都没有改变,那么请不要做任何事情,所以你touchesMoved功能看起来像这样;

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

    for touch in touches { 
     let location = touch.location(in: self) 
     let previousLocation = touch.previousLocation(in: self) 

     let translation = CGPoint(x: location.x - previousLocation.x, y: location.y - previousLocation.y) 
     if translation == CGPoint.zero { 
      continue 
     } 

     touchStatusLabel.text = String(format: "TOUCH MOVED %@", arguments:[NSStringFromCGPoint(location)]) 

     if !aButton.frame.contains(location) && !bButton.frame.contains(location) { 
      if location.x < 0 && location.y < 0 { 
       leftThumbStickNode.touchesMoved([touch], with: event) 
      } 
     } 
    } 
} 
+0

对不起,反应迟缓。它没有帮助,因为触摸位置已更改。我尝试做出一些门槛,但它也没有帮助,有时触摸位置有很大的差异。我还发现touchBegan和touchEnded也被称为但很少 – morffy

相关问题