Масштабирование и прокрутка с помощью OpenGL ES

Я делаю 2D-головоломку для iOS и в настоящее время пытаюсь реализовать масштабирование и прокрутку с помощью 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 дня.

10
задан riens 19 April 2012 в 15:14
поделиться