2012-04-19 14 views
10

Estoy creando un rompecabezas 2D para iOS y actualmente estoy intentando implementar el zoom y el desplazamiento con UIPinchGestureRecognizer.Acercar y deslizar con OpenGL ES

El zoom se hace de esta manera: tengo un vector 2D objetivo que es un "punto de acercamiento". El código es:

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

objetivo se está seleccionando con reconocedor gesto de esta manera:

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

Todo funciona muy bien.

Inicialmente, el juego fue diseñado para iPAD, pero también quiero que funcione en iPhone y en iPOD. Pero iPhone y iPOD tienen una relación de aspecto diferente. Para mantener las proporciones iniciales de la imagen, decidí hacer la escala Y inicial un poco más grande. También esto hizo posible deslizar el campo de juego hacia arriba y hacia abajo con el factor de zoom inicial. El código es:

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

Esto funciona bien si el campo de juego está "centrado" en la pantalla (por ejemplo, cuando hay un espacio igual en direcciones bot banda magnética (arriba y abajo).). Pero si deslizamos el campo hacia arriba o hacia abajo y comenzamos un gesto de pellizco, el campo de juego vuelve a saltar al centro.

Entiendo que necesito traducir la posición del gesto por un desplazamiento, pero no puedo calcular exactamente durante 3 días.

+0

No obtuve exactamente el zoom y el código móvil, pero parece que no se tiene en cuenta la nueva posición de la escena después del movimiento y el zoom con la posición anterior como centro de acercamiento. Debes recordar en qué posición está tu escena actualmente y escalar y traducir concat. –

+0

No manejo la posición de la escena, solo escala el "objetivo", que puede estar en cualquier lugar de la pantalla y no se puede confiar en :( – riens

+0

En lugar de encontrar y recalibrar la función "glOrthof", escalar con una relación de aspecto .. –

Respuesta

1

Guarde la cantidad de traducción que realiza al deslizar, luego, después de cada llamada al handlePinchGesture, aplique la traducción que había guardado al deslizar.

Espero que ayude.