2015-03-02 6 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) 
    } 
    } 

У меня есть перекрестие на экране, и я могу перемещать его, используя touchhesmoved, как показано выше, но моя проблема в том, что я не знаю, как предотвратить его от выхода из экрана. есть 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

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