iPhoneФорумПрограммирование

Зуминг и скроллинг

#0
17:03, 11 апр 2012

Делаю игру на OpenGL(2D пазл) для iOS, пытаюсь реализовать зуминг и скролинг игрового поля.

Использую UIPinchGestureRecognizer.

Зуминг реализуется следующим образом: есть некий target(2Д вектор, x, y) который является точкой зума. Сам зуминг делается следующим образом:

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

Target берется из gesture recognizer`а следующим образом:

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

Все работает просто замечательно.

Изначально игра была рассчитана на айпад, но я хочу чтобы она работала и на айфоне и айподе, но там другое соотношение сторон экрана. Чтобы картинка получилась пропорциональной и без искажений, я сделал изначальный scale по оси Y немного больше, таким образом, что можно изначально таскать экран вверх и вниз. Вот код:

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

Суть в том, что если игровая локация находится "в центре" (то есть когда сверху и снизу одинаковое пространство, на которое можно скроллить) - все ок. Но если мы потянули поле вверх или вниз и начали жест, то поле резко прыгает в центр. Задним числом понимаю, что нужно как-то смещать позицию жеста, но уже 2 дня не могу понять, как именно.

Заранее спасибо.

#1
18:12, 20 апр 2012

Бамп

#2
19:30, 20 апр 2012

riens
> Задним числом понимаю, что нужно как-то смещать позицию жеста, но уже 2 дня не
> могу понять, как именно.
относительно центра мировых координат?!

#3
13:58, 23 апр 2012

StiX
Получается что да. А центр мировых координат вот в этом таргете.

Прошло более 1 года
#4
5:03, 12 дек 2013

не оч понял пролему, но попробуй сбрасывать velocity рекогнайзера после передачи его в свои обработчики, таким образом на след кадре будет новый velocity, не только при UIGestureRecognizerStateBegan а всегда

iPhoneФорумПрограммирование

Тема в архиве.