将节点钳制到屏幕边界

时间:2015-03-02 11:58:43

标签: sprite-kit bounds touchesmoved

 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但我不完全确定如何使用它们,我们将非常感谢任何帮助。

2 个答案:

答案 0 :(得分: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 :(得分: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);