2012-02-21 6 views
5

¿Cómo se ocupa Flash de los elementos que están fuera del escenario?¿Los objetos DisplayObjects fuera de escena siguen disminuyendo la velocidad de mi juego?

Obviamente, Flash no los renderiza (porque no aparecen en ninguna parte de la pantalla), pero es el proceso de hacerlos existir aún, ralentizando mi juego tanto como lo haría si los elementos estuvieran encendidos. ¿pantalla?

¿O Flash ignora de forma inteligente los elementos que no caen en un área renderizable?

¿Debo gestionar manualmente la eliminación de objetos del DisplayList y volver a agregarlos como la salida e ingresar al escenario, o esto será irrelevante?

+1

Podría escribir una prueba simple. Aunque no se representan, todavía están en la jerarquía y podrían estar haciendo cosas desagradables como animar, ejecutar scripts y despachar montones de eventos. –

+0

Creo que el dibujo real de los objetos consume la mayor parte del rendimiento, por lo que cuando están fuera del escenario no debería ser un problema. pero como dijo Valentin, cuando todavía están "ejecutando guiones y/o enviando toneladas de eventos" definitivamente están ralentizando todo el juego. si no vuelven a aparecer en el escenario, destrúyalos; si lo hacen, intente y "pause" hasta que vuelvan a aparecer ... – pkyeck

+0

Estoy de acuerdo en que debe escribir algunas pruebas, obtener un montón de objetos y animarlos de un lado a otro. En la pantalla, con el generador de perfiles de Flash Builder debe poder localizar cualquier cuello de botella. Me gustaría probar con solo verlos salir de la pantalla, y también probar quitarChild() y visible después de salir de la pantalla, sin embargo, no use alpha 0. – Neil

Respuesta

2

Sí, están ralentizando su juego.

En uno de mis primeros experimentos, he desarrollado un juego de desplazamiento lateral con muchos NPC dispersos por el mapa, no todos visibles en la misma pantalla. Todavía tenía que calcular cosas, pero no estaban en la pantalla. El rendimiento fue significativamente mejor cuando manejé su eliminación de la lista de visualización cuando era irrelevante (simplemente revisando su X en relación con la 'cámara'). Una vez más, no estoy hablando de código adicional y eventos que pueden estar asociados a ellos, simplemente hijos gráficos de un movieclip.

La mejor práctica, sin embargo, en mi experiencia, es dibujar los objetos en mapas de bits. Por supuesto, si estás demasiado metido en tu juego, esto puede ser irrelevante, pero si tienes tiempo para invertir, esta es una de las mejores maneras de aprovechar al máximo AS3 con respecto a los juegos en 2D. Encontré algunos de los mejores tutoriales con respecto a mapas de bits y AS3 en 8reetingcket http://www.8bitrocket.com/books/the-essential-guide-to-flash-games/ Puedo explayarme sobre el tema si lo desea, pero creo que voy a desviarme del tema aquí.

+0

Buen historial - y buenos consejos sobre mapas de bits; esto es algo que he estado haciendo desde hace bastante tiempo. – Marty

0

Incluso si algunos objetos de visualización están fuera del área del escenario, se siguen ejecutando. Si tienen alguna animación jugando en ellos, puede ralentizar el rendimiento.

Surge la pregunta, ¿por qué tenemos que mantener los artículos no utilizados fuera del área del escenario? si necesita 'almacenar en caché' los clips de película para una carga más rápida, luego cárguelos en un fotograma clave donde el control nunca irá. por ej. cargue los objetos de visualización que desea mostrar en el fotograma 1, luego coloque un stop() en el panel de acciones del fotograma, conviértalo en un fotograma clave, y en el fotograma 2 cargue las animaciones no utilizadas. dado que hay un stop() en el cuadro 1, el control nunca entra en el cuadro 2, pero los objetos de visualización se almacenan en caché.

O, si tiene códigos en los objetos de pantalla no utilizados y necesita cargarlos junto con los componentes principales del juego, intente poner stop() en los marcos de los objetos de visualización no utilizados para que no se anulen .

Cuestiones relacionadas