2010-10-16 12 views
10

Me he estado preguntando si lienzo tiene un límite de límite.La eficiencia sobre el lienzo de Android dibujo

Quiero decir, si uso funciones como drawline(), drawbitmap(), drawcircle(), ¿Realmente Android dibuja algo en el lienzo y desperdicia algunos ciclos de CPU?

porque después de todas las funciones de dibujo, la impresión de la imagen real en la pantalla se decide por el tamaño de la pantalla. Y si dibujo algo que está fuera del tamaño de la pantalla, no aparece.

Quiero hacer algunos pequeños detalles en mi lienzo llamando a muchas funciones de dibujo y hacer que mi superficie "bling bling". Si está fuera de límite no quiero usarlos, si hacen que mi dibujo disminuya.

Estoy trabajando en un pequeño juego por la estructura de Surfaceview, gracias por cualquier consejo.

Por ejemplo:

Tengo un robot caminar de un < -> b fuera de la pantalla.

se necesitan 20 funciones de dibujo para dibujar una imagen de robot caminando en el lienzo. Si me desplazo por la pantalla, entonces puedo ver el robot.

Si la función de dibujo fuera de la pantalla realmente toma tanto tiempo como dibujar en la pantalla. Tengo que detectar eso solo si el usuario puede ver la posición del robot, entonces dibujo. de lo contrario, yo no.

si la función de dibujo no desperdicia muchos ciclos de CPU, entonces puedo dibujar cada vez incluso si la pantalla actual no puede ver el robot.

Respuesta

5

Su lienzo está respaldado por su mapa de bits (2D), o OpenGL (3D, con el que no tengo experiencia). Todo el dibujo de su lienzo está recortado en el rectángulo de recorte, que puede crecer, contraerse, intersecarse con nuevos rectángulos o caminos, etc. Por lo tanto, realmente desea administrar los rectángulos de recorte antes de dibujar en el lienzo, especialmente si está respaldado por un mapa de bits grande Si recorta en una región que es igual al tamaño de la pantalla, ahorrará ciclos de CPU. Si su juego es un juego de tipo scroller, puede recortar en una región más grande que el tamaño de la pantalla y desplazarse, dibujando fuera de pantalla de vez en cuando para actualizar el área que está llegando a la pantalla. Si su juego tiene un desplazamiento infinito en todas las direcciones, querrá tener varios lienzos más pequeños que pueda dibujar en todo su lienzo central principal, y darles la vuelta de izquierda a derecha, de arriba hacia abajo dependiendo de las direcciones de su juego de desplazamiento . Un mapa de bits grande con un lienzo puede tener una huella de memoria demasiado grande para un dispositivo pequeño.

13

Otra cosa que puede acelerar el dibujo del lienzo cuando su lienzo cubre toda la pantalla es utilizar un tema que no tiene fondo. El tema predeterminado tiene al menos un fondo de color dibujable y que da como resultado tiempos de dibujado más lentos cuando coloca sus vistas encima, incluso si su vista llena toda la pantalla.

utilizar un tema como:

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

Romain individuo tiene una gran descripción de este fenómeno en http://www.curious-creature.org/2009/03/04/speed-up-your-android-ui/

+0

¿Cómo se hace esto si no es puramente un empate a medida (es decir, no hay ningún archivo XML adjunto) ? –

+1

esto fue increíble, así que una gran mejora – pt123

Cuestiones relacionadas