2010-10-16 2 views
10

Je me demandais si la toile a une limite limite.L'efficacité sur le dessin de toile android

Est-ce que je veux dire que si j'utilise des fonctions telles que drawline(), drawbitmap(), drawcircle(), , android dessine-t-il vraiment quelque chose sur la toile et gaspille-t-il des cycles CPU ?? Car après toutes les fonctions de dessin, l'impression d'image réelle à l'écran est décidée par la taille de l'écran. Et si je dessine sur quelque chose qui est hors de la taille de l'écran, il n'apparaît pas. Je veux faire quelques petits détails sur ma toile en appelant beaucoup de fonctions de dessin et rendre ma surface "bling bling". S'il est hors limite, je ne veux pas les utiliser, s'ils ralentissent mon dessin.

Je travaille sur un petit jeu par la structure de surface, merci pour tout conseil.

pour l'exemple:

J'ai un robot de marche d'une < -> b dehors de l'écran.

il faut 20 fonctions de dessin pour dessiner une image de robot marche sur la toile. Si je fais défiler l'écran, je peux voir le robot. Donc, si la fonction de dessin en dehors de l'écran prend vraiment autant de temps que dessiner sur l'écran. Je dois le détecter seulement si la position du robot peut être vue par l'utilisateur, alors je dessine. sinon, je ne le fais pas.

Si la fonction de dessin ne gaspille pas beaucoup de cycles CPU, je peux simplement dessiner à chaque fois même si l'écran actuel ne peut pas voir le robot.

Répondre

5

Votre toile est soutenue par votre bitmap (2D), ou openGL (3D, dont je n'ai aucune expérience). Tout le dessin sur votre toile est découpé dans le rectangle de découpage, que vous pouvez agrandir, rétrécir, croiser avec de nouveaux rectangles ou chemins, etc. Donc, vous voulez vraiment gérer vos rectangles de découpage avant de dessiner dans votre canevas, surtout s'il est soutenu par un grand bitmap. Si vous effectuez un clip dans une région égale à la taille de l'écran, vous économiserez des cycles CPU. Si votre jeu est un jeu de type Scroller, vous pouvez effectuer un clip sur une zone plus grande que la taille de l'écran et faire un panoramique, en tirant parfois hors de l'écran pour mettre à jour la zone qui apparaît sur l'écran. Si votre jeu a un défilement infini dans toutes les directions, alors vous aurez besoin de plusieurs petites toiles que vous pouvez dessiner autour de votre toile centrale principale, et les retourner de gauche à droite, de haut en bas selon les directions de votre jeu de défilement . Un grand bitmap avec un canevas peut avoir une empreinte mémoire trop importante pour un petit périphérique.

13

Une autre chose qui peut accélérer le dessin de toile lorsque votre toile couvre l'ensemble de l'écran est d'utiliser un thème qui n'a pas d'arrière-plan. Le thème par défaut a au moins un arrière-plan de couleur pouvant être dessiné, ce qui entraîne des temps de dessin plus lents lorsque vous placez vos vues par-dessus, même si votre vue remplit tout l'écran.

utiliser un thème tel que:

<style name="Theme.NoBackground" parent="android:Theme"> 
     <item name="android:windowBackground">@null</item> 
    </style> 
</resources> 

Romain Guy a une grande description de ce phénomène à http://www.curious-creature.org/2009/03/04/speed-up-your-android-ui/

+0

Comment faites-vous cela s'il est purement un tirage personnalisé (pas de fichier XML ci-joint) ? –

+1

c'était génial, donc une énorme amélioration – pt123