0

我正在开发一个应用程序,其中有一个可拖动的对象。用户可以将该对象拖动到指定的路径中,而不是路径之外。为了实现这一点,我必须设置边界条件,以便如果触摸点超出该边界条件,则对象不会移动。

我的问题是我的对象大小是 30*30。现在,如果我从上面的头发装置中触摸对象,然后将其向下拖动,它会给出一个值,但是如果我在下面的某个位置触摸同一个对象,比如说他的下巴,然后将对象移动到与我们相同的位置移动了上一个。现在在这种情况下,观点与上一个不同。所以我不明白我应该设置什么边界条件,如果我设置了第一个值的条件,那么在他的情况下,第二个触摸过程将无法移动,这是错误的,如果我设置了第二个值,那么第一个案例对象也将能够移动到边界以下。我没有使用 cocos 2D。它是简单的 ipad 应用程序。 在此处输入图像描述

为了更好地理解,我现在添加了图像,如果你触摸他左侧的绿色圆圈并向右移动,最后一个值就像 760 但如果你触摸右侧部分并向右移动,那么最后一个点是780什么的。如果垂直拖动对象,也会发生同样的情况。

我的基本要求是对象只能在图像中显示的路径内移动,而不是在它之外。

- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event {
    // Retrieve the touch point
    CGPoint pt = [[touches anyObject] locationInView:gamePice];
   startLocation = pt;
}

- (void)touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event
{

 CGPoint pt1 = [[touches anyObject] locationInView:gamePice];
 CGPoint pt = [[touches anyObject] locationInView:self.view];
   NSLog(@"moved=%f|%f",pt.x,pt.y); 

   if (pt.x>=306 && pt.y>=148 && pt.x<=720 && pt.y<=175) {  //these conditions how to set
        CGRect frame = [gamePice frame];
        frame.origin.x += pt1.x - startLocation.x;
        frame.origin.y += pt1.y - startLocation.y;
        [gamePice setFrame:frame];        
    }
}

请建议如何实现此功能或我应该遵循什么方法。

4

1 回答 1

0

制作一个外部 CGRect,比如说 CGRectMake(306, 148,400,100) ,它是你的路径矩形,你需要多个矩形,但现在从一个开始。

为gamePice制作新框架,这将是根据触摸位置的框架,假设你是这样制作的,

    CGRect frame = [gamePice frame];
    frame.origin.x += pt1.x - startLocation.x;
    frame.origin.y += pt1.y - startLocation.y;

那么你的情况将是,

 if (CGRectContainsRect(outerRect, frame) ) 
 {  
       [gamePice setFrame:frame];
 }

// else dont move...
于 2012-05-29T07:50:40.850 回答