Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: makeleon en Marzo 10, 2013, 10:29:04 PM

Título: Evitar efecto screen tearing
Publicado por: makeleon en Marzo 10, 2013, 10:29:04 PM
Hola, soy nuevo aquí, y este es mi primer mensaje, estoy considerando adquirir la licencia del Gamemaker Studio en principio para desarrollar para windows un juego retro del tipo Arcade y pixelado.

El problema que tengo haciendo pruebas con la versión free es que una vez creado un sprite de un simple círculo y crear un objeto con este sprite, crear una habitación por ejemplo de 640x480, con su view y un port a 256x240 (es una resolución muy baja típica de las máquinas arcade) y crear un evento que lea el teclado y desplace el objeto del sprite, etc, etc... ES QUE ME HACE UN EFECTO TEARING horroroso!! Da igual con que speed pongo el movimiento a 2, a 4, siempre hay un efecto de rastro típico de los juegos que no usan el doble buffering y imprime directamente en la pantalla activa.
Da igual si tengo el "allow syncronization to avoid tearing" activo como sino, el efecto sigue presente.
¿Hay una solución? No es un problema de mi tarjeta gráfica, no me produce este efecto los ejecutables creados por otros desarrolladores con GameMaker, ¿me dejo algo que controle el vSync?
Gracias por vuestra atención, reciban un saludo.
Título: Re:Evitar efecto screen tearing
Publicado por: penumbra en Marzo 10, 2013, 11:47:02 PM
No uso estudio ni tengo la intención de alterar el método "estandard" que usa GM para dibuar las cosas en la pantalla, pero sí hay algunas funciones que te permiten manipular el redibujado. Desconozco si sean la solución a lo que pides, o generen algún otro problema, pues como dije, no las he usado ni tengo la intención de usarlas a corto plazo.

set_synchronization(value) Indica si se sincroniza el dibujo en pantalla con la frecuencia del monitor.

set_automatic_draw(value) Indica si se redibuja automáticamente el room o no

screen_wait_vsync() Forza game maker a esperar a la siguiente sincronización vertical

screen_redraw() Redibuja el room llamando de nuevo a todos los eventos draw

Estas funciones se explican en la sección "Repainting the screen" del manual (GM8). Lee detenidamente esa sección, pues ciertas cosas se comportarían distinto si llegas a echar mano de ellas.
Título: Re:Evitar efecto screen tearing
Publicado por: makeleon en Marzo 11, 2013, 12:51:59 AM
Ninguna de esas funciones existen ni se permite en el studio, ¿qué sentido tiene una versión studio para Windows cuando parece ser que el 8.1 (todavía no lo he probado) funciona mejor? ¿Habrá una versión 9 o es precisamente studio?
Es una vergüenza que pierda la posibilidad de portar a los dispositivos móviles por tener que usar la 8.1 al pensar en desarrollar para Windows primeramente
Título: Re:Evitar efecto screen tearing
Publicado por: penumbra en Marzo 11, 2013, 05:20:08 AM
Creo que el Studio es popular porque a muchos desarrolladores les seduce la idea de crear juegos para dispositivos móviles, mac o html5. YoYo ha vendido esa idea y parece que le ha funcionado. Me sorprende saber que ninguna de las funciones para controlar el dibujo en pantalla, existan para Studio. Tengo la sensación de que el studio lo crearon al vapor, y sobre la marcha están tratando de adicionarle características que deberían haber implementado desde un principio.

Studio y la versión 9 serán dos productos distintos, pero YoYo no da mucha información sobre la fecha del lanzamiento.
Título: Re:Evitar efecto screen tearing
Publicado por: Killer en Marzo 11, 2013, 09:42:09 AM
En Game Global Settings, en la pestaña de Windows, en la pestaña Graphics esta la opción Use Synchronization To Avoid Tearing.

En código se usa la función display_reset(aa, vsync), donde aa es el nivel de filtrado anti-alias y vsync es si se desea la sincronización o no.
Título: Re:Evitar efecto screen tearing
Publicado por: makeleon en Marzo 11, 2013, 11:51:35 AM
Muchas gracias a todos, ¿como puedo daros puntos?