使用OpenGL ES进行缩放和滑动

rie*_*ens 10 iphone 2d opengl-es ios

我正在为iOS制作2D拼图,目前我正在尝试使用UIPinchGestureRecognizer实现缩放和滚动.

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

glTranslatef(target.x, target.y, 0);
glScalef(scale, scale, 0);
glTranslatef(-target.x, -target.y, 0);
Run Code Online (Sandbox Code Playgroud)

正在使用手势识别器以这种方式选择目标:

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

一切正常.

最初这款游戏是专为iPAD设计的,但我希望它能够在iPhone和iPOD上运行.但iPhone和iPOD具有不同的宽高比.为了保持初始图像比例,我决定使初始Y比例更大一些.此外,这使得可以使用初始缩放因子上下滑动游戏区域.代码是:

glTranslatef(target.x, target.y, 0);
glScalef(scale, scale * aspectRatio, 0);
glTranslatef(-target.x, -target.y, 0);
Run Code Online (Sandbox Code Playgroud)

如果游戏区域在屏幕上"居中"(例如,在机器人滑动方向上有相同的空间(向上和向下)),这可以正常工作.但是如果我们向上或向下滑动场并开始捏合手势,游戏区域会再次跳到中心.

我知道我需要通过一些偏移来转换手势位置,但我无法确定3天内的确切方式.

Usm*_*.3D 1

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

我希望它有帮助。