Stage.quality vs performance

Uma dos piores problemas que um desenvolvedor tem de enfrentar é o desempenhos de suas aplicações. Existem diversos fatores contribuindo para um mau desempenho, um deles é a renderização dos gráficos.

Dependendo de como você está fazendo, existe uma linha de código que resolve esse problema.

stage.quality = StageQuality.LOW

Quando você define a qualidade do stage como low, você diz para o flash renderizar todos os vetores sem suavização. Isso melhora drásticamente a performance. Contudo, isso pode fazer com que sua aplicação fique horrível dependendo da maneira que você a constroi. Existem algumas coisas que você pode fazer para balancear a performance e a qualidade visual.

A primeira delas é definir o alias mode ddo seus textos como ADVANCED ou se for um texto estático como Anti-alias for readability.

This movie requires Flash Player 9

Outra dica é usar bitmaps em vez de vetores. Claro que você precisa escolher direito quais graficos precisam ter uma boa qualidade e o tamanho deles. Você podem também mudar a qualidade da sua imagem através do painel de propriedades para obter um arquivo menor. Entretanto você precisa tomar cuidado com isso, pois os seus bitmaps não vão suavizar caso você rotacione ou mude sua escala.

Eu não pesquisei porque os bitmaps não distorcem quando a qualidade está como low, mas eu acho que o flash não precisa calcular qual cor cada pixel vai ter quando é exibido, todas as cores já estão definidas pelo bitmapData.

Com isso em mente, eu criei uma classe de conteiner com alta qualidade, chamada HQContainer, que renderiza todos os seus filhos com a qualidade que você quiser (low, medium, high, best).

Basicamente o que acontece por tras é que um Bitmap é criado para cada instancia dessa classe, depois a cada frame a qualidade do stage é definida pela qualidade especificada, o conteiner é desenhado e a qualidade é definida como a que estava antes. Esse é um processo dificil para a cpu, por isso você precisa escolher bem quais objetos precisam ter uma alta qualidade.

Aqui está um exemplo de desempenho.

Eu tenho 1000 quadrados rodando. 990 deles são azuis e tem .05 de opacidade. 10 deles são vermelhos e tem um evento de mouse atrelado a eles.

box_high

Veja que o fps não é o que podemos chamar de bom, mas se mudarmos a qualidade prara low, as coisas ficam bem mais rápidas.

box_low

Devido a opacidade, os quadrados azuis não ficam tão estranhos quanto os vermelhos. Mas se nós adicionarmos eles em um HQContainer o resultado é totalmente diferente.

hq_box

Claro que na vida real nós não vamos fazer quadrados que giram para nossos clientes, mas esse é só um exemplo para mostrar como obter uma bia qualidade visual e um bom desempenho.

Source

Tags: , , ,

3 Responses to “Stage.quality vs performance”

  1. Elder Henrique Souza says:

    Brother, estou muito content com este seu projeto do Blog, está ficando realmente muito interessante a cada novo post.

    Continue o bom trabalho!

  2. Anaya says:

    Valeu cara!! Fico feliz de estar fazendo algo utíl…hehehe

  3. Kevin says:

    Muito bom o post, parabéns!

Leave a Reply