Come posso disegnare uno sprite su uno sfondo usando Quartz e CGLayers?
-
05-07-2019 - |
Domanda
Sono un principiante in Quartz e sto lottando per capire queste cose che Apple dice che è molto semplice e diretto.
Ho creato due CGLayer: uno per uno sfondo fisso e un altro per uno sprite. Voglio che questo sprite si sposti.
Sia il contesto di sfondo che il contesto di sprite sono disegnati fuori dallo schermo e vorrei che entrambi fossero visti sullo schermo.
Per farlo - e non sono sicuro che sia il modo corretto - ho fatto quanto segue:
- Ho creato un UIImageView
-
Ho acquisito i contenuti del livello usando
ResultImage = UIGraphicsGetImageFromCurrentImageContext ();
myView.image = ResultImage;
Questo mi mostra sullo schermo il contenuto di entrambi i livelli di quarzo.
Ora ho due problemi:
- Questo approccio è lento come l'inferno
- Quando sposto il livello, devo ripetere il codice citato e ANCHE FARE QUESTO, LO STRATO NON SI SPOSTA !!!!
Quindi, per favore, guru dell'iPhone là fuori, per favore dimmi se c'è un altro modo per farlo con il quarzo e cosa devo fare per vedere lo sprite muoversi !!!!
grazie per l'aiuto!
Soluzione
Il motivo principale per usare CALayer
è di far comporre la GPU direttamente nella memoria dello schermo. L'uso di UIGraphicsGetImageFromCurrentImageContext ()
comporta che l'immagine sia composta sulla GPU, trasferita nella memoria principale e quindi di nuovo indietro per disegnarla sullo schermo che sarà molto lento. Quello che dovresti fare invece è rendere i tuoi nuovi livelli sublayer del livello della tua vista:
[self.view.layer addSublayer:myNewLayer];
Per un buon esempio di come usare CALayer
in un gioco, vedi: GeekGameBoard