2008-10-01 14 views
5

Tengo una pregunta acerca de los bucles en el flash ....Flash: para los bucles funcionamiento lento

En un juego de fichas que estoy haciendo una tienen un mini mapa de todo el nivel. La forma en que representa el mapa es una función con un ciclo for en otro ciclo for. Hace un ciclo a través de cada posición de mosaico y adjunta una pieza de mapa (básicamente un cuadrado de 3x3 píxeles) que se colorea de acuerdo con lo que es el mosaico. De todos modos, mi problema es que cuando el nivel se pone grande como las fichas de 50x50, el redering del mapa tarda una eternidad (hasta 3 segundos). ¿Hay alguna forma de arreglar esto? ¿O hay otra forma de hacer un mini mapa? Si el nivel se hace cada vez más grande, ¡podría tomar como 10 segundos!

¡Se agradece cualquier ayuda!

Gracias, Matt

+0

¿Se puede publicar el ejemplo del código? ¿Esto es as2 o as3? – defmeta

Respuesta

0

No debe tomar mucho tiempo para que los propios lazos de correr, pero lo que es, exactamente, qué haces dentro de cada bucle? ¿Cuáles son las operaciones para unir y colorear una pieza del mapa?

-Adam

+0

Estoy de acuerdo, será lento dibujar que muchos objetos, pero 3 segundos es un poco exagerado. – grapefrukt

3

Flash no genera azulejos muy rápido. Es excelente para almacenar gráficos que no cambian en un búfer y mostrar rápidamente este búfer rápidamente. Cada objeto gráfico (o sprite) que se agrega como un niño a la etapa debe representarse de forma independiente.

¡Su problema es que el flash tiene que dibujar 50x50 = 2500 mosaicos en cada cuadro! Incluso si tienen 3x3 píxeles, el flash todavía los trata como objetos separados.

Sería bueno si pudiera almacenar todo en un búfer o en un objeto y mostrarlo. Así que intente dibujar estos mosaicos 3x3 en el mismo objeto en lugar de múltiples objetos. Sin embargo, esto podría dificultar su funcionalidad, ya que el objeto completo tendrá que volver a procesarse en cada fotograma.

Algunas otras sugerencias pueden ser para renderizar los objetos en celdas más grandes en una cuadrícula. En lugar de tener 50x50, comience con 10x10 y luego dibuje 5x5 celdas en cada celda. Esto probablemente aceleraría las cosas.

Espero que esto ayude. ¡Si encuentra una buena solución, por favor publique!

1

Sí. El bucle en sí no lleva mucho tiempo. Pero en cada iteración adjunto un movieClip de la biblioteca. Por cierto, no está haciendo esto en enterFrame, solo cuando el usuario presiona Pausa (espacio).

1

Lo más probable es que (como se menciona aquí) su ciclo sea lento. Contar 0-2500 es realmente rápido, pero si realiza cálculos pesados ​​en cada iteración, se sumará. Por supuesto, sin ver el código, no podemos ayudarte con esto. Si bien podría hacer trucos para que el bucle sea más fluido (como ejecutarlo en varios fotogramas), pero si se trata de un bucle de 3 segundos, probablemente haya mucho que hacer para optimizarlo, tal vez incluso en la medida en que funcione lo suficientemente bien , por lo que no causará un aumento demasiado largo.