Consejo rápido solución de problemas de V-Sync (Tearing) en Flash

En la Sugerencia (muy) rápida de hoy, aprenderá cómo resolver el problema común de parpadeo o desgarre. Este es un efecto horrible en Flash donde los mapas de bits parpadean a medida que se actualizan, o parecen romperse en dos imágenes (como en la miniatura).


Qué causa estos problemas?

En pocas palabras: el desgarre ocurre cuando Flash dibuja información de dos marcos diferentes a la pantalla a la vez. En la imagen en miniatura de arriba, puedes ver cómo se ve esto cuando se desplaza a través de una imagen de una torre; la parte inferior de la imagen es de un cuadro, mientras que la mitad superior es de la siguiente. Al ver esto en movimiento, solo lo verías por una fracción de segundo a la vez, pero aún así sería notable..

Esto generalmente se resuelve utilizando "V-sync" (sincronización vertical), que detiene la tarjeta de video dibujando algo en la pantalla hasta el próximo ciclo de actualización de la pantalla. Sin embargo, Flash tiene muy poca compatibilidad con V-sync, ya que la velocidad de fotogramas de Flash Player es diferente a la velocidad de actualización vertical del escritorio, lo que significa que los objetos que tienen mucha altura se golpearán con fuerza al rasgarse. Esto es cierto incluso si la velocidad de fotogramas de Flash es igual a la velocidad de actualización vertical del escritorio, ya que todavía no están sincronizados.

Ahora puede que se pregunte: ¿Por qué Adobe no soluciona este problema? El motivo es que Flash utiliza una línea de tiempo y, al cambiar la velocidad de fotogramas, la velocidad de reproducción cambia. Si hiciera un juego o galería de imágenes a 60 cuadros por segundo y la frecuencia de actualización vertical del escritorio fuera de más de 60 cuadros por segundo, tendría un ligero tartamudeo (si dejara la película a 60 fps), o tendría que jugar Vuelve la película más rápido para sincronizar con el escritorio. Para la mayoría del contenido, esto no sería recomendado en absoluto!

Este es un problema que los desarrolladores de juegos han querido que Adobe solucione durante mucho tiempo, pero es obvio que existen problemas al hacerlo. Entonces, en este momento, nosotros los desarrolladores tenemos que encontrar formas creativas para resolver este problema nosotros mismos. No hay una manera fácil de solucionarlo en todas las computadoras, pero como la mayoría de los monitores tienen una frecuencia de actualización de 59.9 o 60, entonces puede establecer la velocidad de fotogramas en 60 para resolverlo para la mayoría de los usuarios. Sin embargo, esto requiere más capacidad de procesamiento y podría ralentizar la aplicación..

La mejor manera de resolver esto en este momento es bastante simple y fácil de hacer. No soluciona la causa subyacente, pero sí ayuda a reducir la cantidad de desgarros tanto como sea posible.


¿Cómo puedo reducir el desgarro??

Aceleración de hardware Nivel 1: Directo Es la clave para ayudar al problema de lagrimeo. Esto se puede configurar abriendo el archivo HTML donde está incrustado su SWF y editando los parámetros para el objeto Flash.

La bandera que desea establecer es wmode: "directo". Esta línea va en la sección 'parámetros' de su código HTML. Eso es todo, eso debería ayudar a reducir dramáticamente el desgarro. Si desea saber por qué, mire la página de Adobe sobre aceleración de hardware. Explica un poco acerca de ambos niveles de aceleración de hardware. Para más información, echa un vistazo a este artículo en profundidad..


Algo más?

Sí; otra cosa a mencionar es que, cuantos más objetos tenga en la pantalla, más evidente será la rotura. Los elementos más pequeños generalmente no se ven afectados por los problemas de sincronización de V, pero los elementos en la pantalla que son grandes lo hacen muy obvio, por lo que es una buena idea mantener la cantidad de objetos grandes al mínimo..

Además, utilizando bitmapData.lock () y bitmapData.unlock () Se recomienda y ha ayudado a algunas personas con este problema. El bloqueo de un objeto BitmapData evita que los mapas de bits se vuelvan a dibujar hasta que se desbloquee, lo cual es una buena idea si necesita realizar varios cambios entre los marcos. Para obtener más información, eche un vistazo a esta entrada de blog.


Conclusión

Puede hacer algunas cosas para ayudar a reducir el desgarro, pero no puede eliminarlo por completo. Reduciendo la cantidad de objetos grandes, configurando wmode: "directo" y usar el bloqueo de mapa de bits son las mejores maneras de ayudar a reducir el desgarro.