0

使用捏合手势,我将 sprite/box2d 主体拆分为 n 个形状。我确定使用方法创建形状的位置equidistantPointsOnACircleForMidpoint。我想根据捏合手势的触摸位置 ( touchPoints) 给出的(近似)旋转/移动来移动这些对象。

例如,如果将一个对象分成两个对象,我希望第一个新对象靠近一个手指结束触摸手势的位置,而不仅仅是相对于中点的 0° 和 180°。我不能只将它们放在捏合手势的坐标处,因为创建的新对象的数量从 2 到 10 不等。我已经展示了两个对象的问题,因为这是我能想到的最清晰的示例。

我想对围绕一个圆圈等距放置的点应用旋转,所以起点是第一个捏合手势的位置。这可能就像将第一个点放在圆圈上作为第一个触摸位置一样简单。对于你们中的许多人来说,这可能是基本的数学。这不适合我——我不知所措,这就是我问这个问题的原因。

我有捏手势触摸位置,并且我有同样布局的点 - 我想将两者结合起来;即布局的起点是pinchgesture中的第一个触摸坐标(如图)。

以下是我列出要点的方式:

-(NSArray*)equidistantPointsOnACircleForMidpoint:(CGPoint)midpoint numberOfPoints:(int)points withRadius:(double)radius pinchGestureTouchCoordinates:(NSArray*)touchPoints{

    //We need to prevent objects being placed outside the bounds of the screen.
    CGSize screenSize = [[CCDirector sharedDirector] winSize];

    NSMutableArray *pointsArray = [[[NSMutableArray alloc]init ] autorelease];

    if([touchPoints count]){
        NSLog(@"touchPoint at 0: %@", [touchPoints objectAtIndex:0]);

    }

    double step = ((M_PI * 2) / points);
    double x, y, current = 0;
    for (int i = 0; i < points; i++)
    {
        x = sin(current) * radius;
        y = cos(current) * radius;


        if (x+(midpoint.x*PTM_RATIO) > screenSize.width) {
            NSLog(@"WARNING: Width out of bounds");
        }
        if (y+(midpoint.y*PTM_RATIO) > screenSize.height) {
            NSLog(@"WARNING: Height out of bounds");
        }

        [pointsArray addObject:[NSNumber valueWithCGPoint:CGPointMake(x+(midpoint.x*PTM_RATIO), y+(midpoint.y*PTM_RATIO))]];

        current += step;
    }
    return pointsArray;
}

现在发生了什么事:

在此处输入图像描述

我想要发生的事情: 在此处输入图像描述

4

1 回答 1

0

您可以创建自己的类别,以便能够获取在 UIPinchGestureRecognizer 接口中声明的触摸数组

UITouch          *_touches[2];

然后,当您创建手势识别器时,您为其设置回调,它将接收识别器作为参数。使用类别方法,您可以获得每次触摸的所有信息(在这种情况下您需要位置)并处理它们以确定所需的旋转角度。

于 2012-10-29T08:23:49.823 回答