2012-04-19 123 views
10

我正在为iOS制作二维拼图,目前我正试图通过UIPinchGestureRecognizer实现缩放和滚动。使用OpenGL ES缩放和滑动

缩放是这样完成的:我有一个目标2D矢量,它是一个“缩放点”。该代码是:

glTranslatef(target.x, target.y, 0); 
glScalef(scale, scale, 0); 
glTranslatef(-target.x, -target.y, 0); 

目标被选中与手势识别是这样的:

-(void)handlePinchGesture:(UIPinchGestureRecognizer*)recognizer 
{ 
    if (UIGestureRecognizerStateBegan == [recognizer state]) 
    { 
     view->setTarget([recognizer locationInView:self]); 
    } 
    // Rest of the code omitted 
} 

一切工作就好了。

最初这款游戏是为iPAD设计的,但我希望它能够在iPhone和iPOD上运行。但iPhone和iPOD有不同的长宽比。为了保持最初的图片比例,我决定让最初的Y缩放比较大。而且这也使得用初始缩放因子向上和向下滑动游戏场成为可能。该代码是:

glTranslatef(target.x, target.y, 0); 
glScalef(scale, scale * aspectRatio, 0); 
glTranslatef(-target.x, -target.y, 0); 

如果游戏场“中心”在屏幕这只是正常(例如当有平等的空间机器人挥动方向(上下)。)。但是,如果我们向上或向下滑动场地并开始捏手势,游戏场将再次跳转到中心。

据我所知,我需要翻译一些偏移的手势位置,但我无法确定3天的精确程度。

+0

我并没有完全得到你的缩放和移动代码,但它听起来像你并没有考虑到你的场景在移动后的新位置,以及将旧位置缩放为缩放中心的情况。你需要记住你的场景当前在哪个位置,并且连续缩放和翻译。 – 2012-04-19 15:31:26

+0

我不处理场景位置 - 只能缩放“目标”,它可以在屏幕上的任何位置,并且不能依赖于: – riens 2012-04-20 12:07:55

+0

找到并重新校准函数“glOrthof”,然后缩放一些长宽比。 – 2012-05-17 13:38:38

回答

1

保存您在滑动时进行的翻译量,然后在每次调用handlePinchGesture后,应用您在滑动时保存的翻译。

我希望它有帮助。