2015-03-02 65 views
0
override func touchesMoved(touches: NSSet, withEvent event: UIEvent) { 

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

      var translation = CGPointMake(location.x - previousLocation.x, location.y - previousLocation.y) 
crossHair.position = CGPointMake(crossHair.position.x + translation.x * 3, crossHair.position.y + translation.y * 3) 
    } 
    } 

我在屏幕上有一个十字准线,我可以使用touchesmoved如上所示移动它,但是我的问题是我不知道如何防止它进入屏幕。有fmaxf & fminf但我不完全确定如何使用它们,任何帮助将不胜感激。钳位节点到屏幕边界

回答

1

您可以使用以下代码将node限制在坐标内。以下代码仅检查精灵的位置是否在边界内。我认为这个位置在精灵的中心。

override func touchesMoved(touches: NSSet, withEvent event: UIEvent) { 

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

     var translation = CGPointMake(location.x - previousLocation.x, location.y - previousLocation.y) 
     var positionX : CGFloat = crossHair.position.x + translation.x * 3 
     var positionY : CGFloat = crossHair.position.y + translation.y * 3 

     if positionX < 0 { 
      positionX = 0 
     } 
     else if positionX > self.size.width 
     { 
      positionX = self.size.width 
     } 

     if positionY < 0 { 
      positionY = 0 
     } 
     else if positionY > self.size.height 
     { 
      positionY = self.size.height 
     } 

     crossHair.position = CGPointMake(positionX, positionY) 

    } 
} 
+1

谢谢你,完美的作品。 – Abdou023 2015-03-02 13:44:22

1

获得十字线的位置后,检查它是否不被外部屏幕:

var x = crossHair.position.x; 
var y = crossHair.position.y; 
if(crossHair.position.x > self.size.width) { 
    x = self.size.width; 
} 
if(crossHair.position.x < 0) { 
x = 0; 
} 
if(crossHair.position.y > self.size.height) { 
    y = self.size.height; 
} 
if(crossHair.position.y < 0) { 
y = 0; 
} 

crossHair.position = CGPointMake(x,y); 
+0

谢谢,完美的作品。 – Abdou023 2015-03-02 13:44:38