【问题标题】:Setting boundary conditions for object to traverse a path through dragging the object通过拖动对象设置对象遍历路径的边界条件
【发布时间】:2012-05-29 06:06:52
【问题描述】:

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

我的问题是我的对象大小是 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];        
    }
}

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

【问题讨论】:

  • 你不能在点上工作。相反,你应该在矩形上工作。如果内部矩形(gamepice)与外部矩形相交..不允许..否则允许....在这里检查 CGRect 方法。 .developer.apple.com/library/mac/#documentation/graphicsimaging/…
  • 您能否提供一两步代码,我可以遵循。
  • 我认为你必须使用 uiview 的边界。

标签: iphone objective-c ios touches touchesmoved


【解决方案1】:

制作一个外部 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...

【讨论】:

  • 我现在没有代码,但我肯定会解释我的解决方案的逻辑。
猜你喜欢
  • 2010-12-05
  • 2020-02-03
  • 2017-05-01
  • 1970-01-01
  • 2015-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多