2008-09-30 17 views
5

Estoy a punto de sacar un sitio web pronto, así que he llegado a las últimas etapas. ¡Es hora de optimizar al bebé! El sitio web funciona bastante bien en general, con un promedio de 32 fps. Pero en algunas partes pesadas de animación le gusta bajar un par de cuadros a unos 22 fps. Lo cual no es tan horrible. Pero estoy retocando tanto como sea posible para mantenerlo funcionando a la mayor velocidad posible.Representación en Flash: consejos y trucos para la optimización

Podría pasar por alto algunos consejos y trucos para hacer que este bebé sea aún más suave.

Así que, por este medio, abro este hilo para compartir los trucos ninja que alguna vez te hayan ayudado en el pasado. Un par de mina que se me ocurre en este momento:

Secuenciación de la animación:

Que tan menos como ocurren transiciones posibles, al mismo tiempo, tratar de hacerlo actuar más como un transformador, una cosa a la vez Además de ganar velocidad en la animación, probablemente termines ganando más flujo.

Mantenga la animación de objetos tan pequeños como sea posible:

por lo que Flash tiene que calcular menos píxeles al mismo tiempo.

cacheAsBitmap = true:

Esos grandes clips de película, formas vectoriales que se movían alrededor, están probablemente más rápido se movió cuando se almacenan en caché como mapa de bits. Podría tomar algo de espacio en su memoria, pero cualquier cosa por una tasa de fotogramas más altas;)

destruir todo lo que no se utiliza:

Elige los clips de película no utilizados en null y luego lo elimina como un niño. Entonces tu recolector de basura se ocupa de eso.

Respuesta

2

Alfa transparencia puede ser intensivo para hacer ...

Por lo que he oído, el filtro de iluminado causará estragos si se está animando.

Use visible = false en lugar de alpha = 0 cuando sea posible.

1

flash (8 - ActionScript 2 o por debajo) rendirá un clip, incluso si se trata de la visibilidad se establece en false - para detenerlo está representando lo que necesita para moverlo fuera de la pantalla 'visible' (es decir, x = -2,000, siempre el ancho de los clips es menos de 2000).

+0

Interesante ... Gosh que parece un truco sin embargo, cualquier otra forma de forzar el Flash Player para no hacer algo? – onekidney

+0

sí Esto es un poco desagradable – Kasper

+0

Esto no es en absoluto mi experiencia, sé que el establecimiento de la alfa a cero tendrá la representación clip de homenaje, pero siempre he trabajado en el supuesto de que visible = false deshabilita el procesamiento de ese clip. – grapefrukt

2

Solo use cacheAsBitmap = true: si no está animando la transformación de Sprite/MovieClip (por ejemplo, escala/rotación, etc.), de lo contrario, en realidad lo hará más lento.

Siempre que sea posible utilice PNG en lugar de formas vectoriales.

4

Otra consideración es qué motor Tween está utilizando. Si está utilizando el que viene con Flash, probablemente obtendrá algún rendimiento al cambiar a algo como TweenLite (también hay muchos otros buenos).

Tenga en cuenta que cacheAsBitmap puede ser muy peligroso. Si está escalando, girando o actualizando el clip (por ejemplo, modificando el alfa de algo dentro de él), el flash tendrá que generar una nueva instantánea, lo que ralentizará todo.Siempre y cuando mueva los clips en xey solo es bueno tener siempre activado (si necesita girar, apáguelo y vuelva a encenderlo cuando termine). Tenga en cuenta también que si utiliza filtros cacheAsBitmap es siempre automáticamente en -> puede ser lento.

3

simplificar las cosas,

Flash representa gráficos como vectores (y muy bien). Cuanto más complejo es un objeto, más tiempo tardará en renderizarse.

Además, trate de realizar el seguimiento del árbol de visualización de gráficos. Todos los niños de la etapa deben representarse por separado, por lo que si tienes 1000 niños, esto puede hacer que las cosas sean realmente lentas.

Una solución es hacer que una vez en un solo objeto, como un controlador de pantalla. Puede perder su 'objetividad' pero lo compensa en una representación más rápida. Ten esto en cuenta cuando hagas fichas o muchas pequeñas 'adiciones' a un sprite.

2

Es posible que desee hacer uso de la propiedad scrollRect de clips de película/sprites, etc ... Básicamente actúa como una máscara, pero con la ventaja de que puede desplazar el clip enmascarado por algún desplazamiento.

1

El caché de mapa de bits solo le ofrece rendimientos reales cuando DisplayObject está almacenando en caché tiene partes internas complejas pero tiende a sentarse allí sin cambiar, como un menú desplegable, que internamente tiene todo tipo de elementos personalizables, pero solo necesita ser re-renderizado cuando se abre o se cierra. Tenga cuidado de activar el almacenamiento en caché solo porque los objetos son grandes.

2

Grandes trozos de texto, si no cambian, a menudo se pueden reemplazar con un mapa de bits (o PNG transparente). Esto hace que el contenido sea difícil de mantener, pero puede tener un impacto significativo en el rendimiento de . (Nota: esto se aplica principalmente a las fuentes incrustadas, especialmente las curvas como fuentes asiáticas, ya que las fuentes se representan como formas vectoriales. Las fuentes del dispositivo son procesadas por el SO e incurren en mucho menos sobrecarga).

2

Perfil, perfil, perfil.

Si los scripts se ejecutan lentamente, comience a rastrear los informes de tiempos para descubrir qué clase, qué función, qué bucle, qué instrucción lo está haciendo lento. Si los efectos gráficos lo están desacelerando, trace informes de tiempo detallado FPS y comience a ajustarlos. ¿Se acelera cuando quitas esta o esa capa? ¿O cuando cambias ese clip para que no sea transparente? Y así. Aísle lo que es lento antes de tratar de arreglarlo.

Sólo refactoring hurgando y rara vez se consigue ninguna mejora de rendimiento real.

Cuestiones relacionadas