0

嗨,我有一个可以在触摸时移动的对象,但我需要它只能在设定的区域内移动,因此:

x 0 到 320 和 y 0 到 200

player.center = [myTouch locationInView:self.view];

有任何想法吗?

这样如果用户试图将其移出该区域,它只会挂在外边缘。

4

3 回答 3

0

你可能想做这样的事情:

CGRect validRect = CGRectMake(0.0, 0.0, 320.0, 200.0);
CGPoint touchPoint = [myTouch locationInView:self.view];
if(CGRectContainsPoint(validRect, touchPoint) {
    player.center = touchPoint;
}
于 2012-09-15T15:07:01.223 回答
0

这里的代码其实很简单,就是想检测是否超出了边界,如果超出了,就纠正。假设player.center类似于NSPoint,代码可能类似于:

if(player.center.x <= 0){
    player.center.x = 0;
}else if(player.center.x >= 200){
    player.center.x = 200;
}
if(player.center.y <= 0){
    player.center.y = 0;
}else if(player.center.y >= 300){
    player.center.y = 300;
}

如果您希望边缘不通过侧面,那么您可以执行以下操作:

if(player.center.x - player.xSize / 2 <= 0){
    player.center.x = 0 + player.xSize / 2;
}

对于其他 x 界限和 y 界限也是如此。

于 2012-09-15T15:08:03.057 回答
0

您可以使用 MIN 和 MAX 来约束一个值。

CGFloat minX = 0.0f;
CGFloat maxX = 320.0f;
CGFloat minY = 0.0f;
CGFloat maxY = 200.0f

CGPoint location = [myTouch locationInView:self.view];
CGPoint center = CGPointMake(MIN(minX, MAX(maxX, location.x)),
                             MIN(minY, MAX(maxY, location.y)));
player.center = center;
于 2012-09-15T15:06:50.623 回答