iPhone: Создание игр для iOS (iPhone и iPad)
GameDev.ru / Сообщества / iPhone / Форум / Зуминг и скроллинг

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

riensПользовательwww11 апр. 201217:03#0
Делаю игру на 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 дня не могу понять, как именно.

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

riensПользовательwww20 апр. 201218:12#1
Бамп
StiXУдалёнwww20 апр. 201219:30#2
riens
> Задним числом понимаю, что нужно как-то смещать позицию жеста, но уже 2 дня не
> могу понять, как именно.
относительно центра мировых координат?!
riensПользовательwww23 апр. 201213:58#3
StiX
Получается что да. А центр мировых координат вот в этом таргете.
KatekovAntonПостоялецwww12 дек. 20135:03#4
не оч понял пролему, но попробуй сбрасывать velocity рекогнайзера после передачи его в свои обработчики, таким образом на след кадре будет новый velocity, не только при UIGestureRecognizerStateBegan а всегда

/ Форум / iPhone: Создание игр / Программирование

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

2001—2018 © GameDev.ru — Разработка игр