2012-03-13 5 views
5

Quale dovrebbe essere la differenza, in termini di scopo, tra questi due metodi nel mio ciclo di rendering?Differenza tra glkView: drawInRect: e glkViewControllerUpdate :? OpenGL ES 2 - iOS

Apple ha questo da dire ....

Chi update() Il controller di visualizzare le chiamate glkViewControllerUpdate dei suoi delegati: metodo. Il delegato dovrebbe aggiornare i dati del frame che non implicano il rendering dei risultati sullo schermo.

Circa drawInRect: l'oggetto GLKView fa il suo contesto OpenGL ES contesto attuale e si lega la sua framebuffer come destinazione per il rendering OpenGL ES comandi. Il tuo metodo delegato dovrebbe quindi disegnare i contenuti della vista.

Fondamentalmente, quando creo un GLKView nel mio controller di visualizzazione, quel controller diventa delato, quindi sto osservando questi metodi fianco a fianco.

Ho assunto che update() dovrebbe contenere trasformazioni o altra logica.

risposta

4

Nel primo caso, Apple sta cercando di aiutarti a separare il tempo dalla frequenza dei fotogrammi. Se il tuo gioco riesce sempre a disegnare una cornice nel tempo assegnato per un singolo fotogramma, i due si verificano in un attimo. Ma anche se molti oggetti vengono visualizzati sullo schermo e la frequenza dei fotogrammi diminuisce leggermente, riceverai lo stesso numero di aggiornamenti al secondo in modo che gli oggetti continuino a muoversi alla stessa velocità.

Nel secondo, ti stanno aiutando a mantenere il codice diviso come model-view-controller. Come vengono presentati i tuoi oggetti dovrebbero essere disaccoppiati dal loro modo di agire.

Così il tuo aggiornamento dovrebbe progredire qualunque sia ciò che causa la tua animazione, il tuo disegno dovrebbe presentare lo stato attuale.

+0

Vedo. Così, ad esempio, in Space Invaders, una nuova nave che entra nella vista del modello o il giocatore che esegue lo zoom su un pianeta sarebbe sotto la responsabilità dell'aggiornamento. Mentre drawInRect: proietta semplicemente la matrice, fino al frame rate desiderato, ma non sempre è in grado di tenere il passo a seconda del carico. –

+0

Sì - qualsiasi logica che aggiorni lo stato del gioco farebbe parte dell'aggiornamento, sia che si aggiunga un nuovo modello o si muova la telecamera. – Tommy