Comment dessiner un sprite sur un fond avec Quartz et CGLayers?
-
05-07-2019 - |
Question
Je suis un débutant dans Quartz et je me bats pour comprendre ce que Apple dit est très simple et facile.
J'ai créé deux CGLayers: un pour un fond fixe et un autre pour un sprite. Je veux que ce sprite bouge.
Le contexte de l'arrière-plan et le contexte de l'image-objet sont tous deux dessinés hors écran. J'aimerais que les deux apparaissent à l'écran.
Pour ce faire, et je ne suis pas sûr que ce soit la bonne façon, j'ai pris les mesures suivantes:
- J'ai créé un UIImageView
-
J'ai capturé le contenu de la couche à l'aide de
résultantImage = UIGraphicsGetImageFromCurrentImageContext ();
myView.image = resultImage;
Cela me montre à l'écran le contenu des deux couches de quartz.
Maintenant, j'ai deux problèmes:
- Cette approche est lente comme l'enfer
- Lorsque je déplace le calque, je dois répéter le code mentionné et EN FAIT, LA COUCHE NE DÉPLACE PAS !!!!
Alors, s'il vous plaît, gourous de l'iPhone, dites-moi s'il existe un autre moyen de faire cela avec le quartz et ce que je dois faire pour voir le sprite bouger !!!!
merci pour toute aide!
La solution
La principale raison d'utiliser CALayer
est de faire en sorte que le GPU se compose directement sur la mémoire d'écran. Si vous utilisez UIGraphicsGetImageFromCurrentImageContext ()
, l’image est composée sur le GPU, transférée dans la mémoire principale puis à nouveau pour la dessiner à l’écran, ce qui sera très lent. Ce que vous devriez plutôt faire, c'est créer des sous-couches du calque de votre vue dans vos nouvelles couches:
[self.view.layer addSublayer:myNewLayer];
Pour un bon exemple d'utilisation de CALayer
dans un jeu, voir: GeekGameBoard