Sto creando un puzzle 2D per iOS e attualmente sto cercando di implementare lo zoom e lo scorrimento con UIPinchGestureRecognizer.Zoom e scorrimento con OpenGL ES
Lo zoom è fatto in questo modo: ho un vettore 2D di destinazione che è un "punto di zoom". Il codice è:
glTranslatef(target.x, target.y, 0);
glScalef(scale, scale, 0);
glTranslatef(-target.x, -target.y, 0);
bersaglio viene selezionato con il gesto riconoscitore in questo modo:
-(void)handlePinchGesture:(UIPinchGestureRecognizer*)recognizer
{
if (UIGestureRecognizerStateBegan == [recognizer state])
{
view->setTarget([recognizer locationInView:self]);
}
// Rest of the code omitted
}
Tutto funziona bene.
Inizialmente il gioco è stato progettato per iPAD, ma voglio che funzioni anche su iPhone e iPOD. Ma iPhone e iPOD hanno proporzioni diverse. Per mantenere le proporzioni iniziali dell'immagine ho deciso di rendere la scala Y un po 'più grande. Anche questo ha reso possibile scorrere il campo di gioco su e giù con il fattore di zoom iniziale. Il codice è:
glTranslatef(target.x, target.y, 0);
glScalef(scale, scale * aspectRatio, 0);
glTranslatef(-target.x, -target.y, 0);
Questo funziona bene se il campo di gioco è "centrato" lo schermo (per esempio quando ci sono lo stesso spazio in direzioni bot magnetiche (su e giù).). Ma se si fa scorrere il campo verso l'alto o verso il basso e si inizia il gesto di pizzicare, il campo di gioco salta nuovamente al centro.
Capisco che ho bisogno di tradurre la posizione del gesto di qualche offset, ma non riesco a capire come esattamente per 3 giorni.
Non ho ottenuto esattamente lo zoom e il codice in movimento, ma sembra che tu non prenda in considerazione la nuova posizione della scena dopo lo spostamento e con quello zoom con la vecchia posizione come centro dello zoom. È necessario ricordare in quale posizione è attualmente la scena e ridimensionare e tradurre concat. –
Non gestisco la posizione della scena - solo scala "target", che può essere ovunque sullo schermo e non può essere invocata su :( – riens
Piuttosto trovare e ricalibrare la funzione "glOrthof" quindi ridimensionare con alcune proporzioni .. –