Hola, como están? bueno, básicamente esa es mi pregunta... de que manera puedo sustituir sprite_create_from_screen() que ha sido suprimido de la ultima versión de game maker. Se que una manera es (y gracias a la ayuda de penumbra) pude comprender mejor el surface. Pero, como logro dibujar todo el screen en la superficie? :-\
En todo caso si existe alguna otra alternativa por favor díganmela.
Saludos y gracias!
es bastante sencillo. Debes usar vistas, suponiendo que usas la vista 0
Creas una superficie en CREATE del obj controlador
mi_superficie = surface_create(view_wport[0], view_hview[0])
En DRAW ocurre la magia, la función que dibuja la vista en la siperficie.
view_surface_id[0] = mi_superficie;
en el evento [Draw GUI]
if surface_exists(mi_superficie)
{
draw_surface(mi_surf, 0, 0);
}
Lo que no sé y no entiendo es por qué la superficie se debe dibujar precísamente en elvento DRAW GUI. Si se dibuja en otro evento DRAW no aparece (se ve todo negro). Pero de que funciona, funciona.
view_surface_id[n] desactiva el dibujado de la view elegida, por eso si lo usas con la view 0, que es la view usada por defecto para dibujar la pantalla y tratas de dibujarlo en un evento draw normal solo aparece un cuadro negro, mientras que Draw GUI no depende de views para dibujarse.
Cita de: Killer en Abril 26, 2014, 12:24:24 AM
view_surface_id[n] desactiva el dibujado de la view elegida, por eso si lo usas con la view 0, que es la view usada por defecto para dibujar la pantalla y tratas de dibujarlo en un evento draw normal solo aparece un cuadro negro, mientras que Draw GUI no depende de views para dibujarse.
¡¡Cierto!! Y ahora que veo, el mismo manual lo dice, esa vista no se dibuja en pantalla, y tienes dos opciones, usar draw gui o usar exclusivamente otra vista para dibujar la surface (Se cachetea a si mismo)XD
Gracias, Killer. Todos los días se aprende algo nuevo
Gracias de nuevo por la ayuda penumbra y tu también Killer gracias!
No me sale... no se que estoy haciendo mal. De hecho, intente el ejemplo de yoyogames y solo obtengo una pantalla en negro :-X
Create:
surf = -1;
Draw:
if !surface_exists(surf)
{
surf = surface_create(view_wview[0], view_hview[0]);
view_surface_id[0] = surf;
}
Draw GUI:
if !surface_exists(surf)
{
draw_surface_stretched(surf, 0, 0, display_get_gui_width(), display_get_gui_height());
}
Te esta sucediendo lo que [user]killer[/user] le explico a [user]penumbra[/user]: debes usar otra view para dibujar la surface asignada a la view[0]
Hola vampy09, según entiendo la Draw GUI evita ese problema porque trabaja independientemente de las view.
No se si sea en este caso relevante... pero el room es grande, de hecho, me conviene que varíe según el nivel... y el tamaño de la view es por su puesto menor al del room. Lo que intento hacer es un clásico "pause menu" y necesito tomar una captura de la pantalla para dibujarla en el menú... también estoy utilizando instance_activate_all() e instance_deactivate_all(). No se si eso interfiere de alguna manera.
:-[ discúlpenme por no mencionar esos detalles...
Momento, ese es el código del manual? La última parte no tiene sentido, básicamente esta poniendo en el evento Draw GUI "si no existe la superficie dibuja la superficie."
Trata modificando el if en Draw GUI para que sea si la superficie existe.
Creo que ese es efectivamente el código del manual, y está mal, yo me saqué de onda cuando lo vi, de hecho, no es el primer ni el segundo error que me encuentro en el manual de GM:S.
Cita de: Killer en Abril 28, 2014, 08:48:00 PM
Momento, ese es el código del manual? La última parte no tiene sentido, básicamente esta poniendo en el evento Draw GUI "si no existe la superficie dibuja la superficie."
Trata modificando el if en Draw GUI para que sea si la superficie existe.
Si Killer, eso hice... pero no tuve suerte. Yo también sospeche lo mismo... pero por si acaso probé de las dos maneras.
Raro, ahora que he tenido un momento he probado el código del manual, y haciendo la corrección en Draw GUI funciona correctamente. Asegúrate de que la view está bien configurada y de que no haya ningún código que pueda interferir con la superficie.
Quizás quieras hacer un proyecto nuevo con un room y algunos objetos que dibujen sprites en él, algo básico, y probar el código ahí para asegurarte de que no haya nada que pueda afectar el resultado. Si igual no te funciona quizás tengas una versión donde este bugeado, para comparación yo tengo la 1.3.307.
Por cierto, si de casualidad esa es la versión que usas acabo de recordar que todo este asunto probablemente se vuelve innecesario, ahora la variable application_surface contiene la superficie principal que se usa para dibujar normalmente el juego, y puedes usarla para crear sprites como con cualquier otra superficie:
sprite_create_from_surface(application_surface,0,0,64,64,1,0,0,0)
Ok! gracias Killer! probare lo que me dices... si no... me quedara actualizar ??? aunque no me gusta mucho la idea porque eliminan funciones y principalmente mi problema se origino por la falta de sprite_create_from_screen() :-X
Edito: no es la versión... hice un proyecto de prueba y me funciono sin problema. -.-