我正在为 iOS 制作一个 2D 拼图,目前我正在尝试使用 UIPinchGestureRecognizer 实现缩放和滚动。
缩放是通过这种方式完成的:我有一个目标 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 天的准确度。