Salvare la schermata in una surface

Hai una curiosità o un problema con Game Maker? Domanda e ti sarà risposto!
Rispondi
Avatar utente
Cash
Membro super
Messaggi: 933
Iscritto il: 09/11/2013, 20:40
Uso: GM:Studio 1.4 Pro
Contatta:

Salvare la schermata in una surface

Messaggio da Cash »

Ci sto provando da un po' eppure proprio non riesco,praticamente voglio fare che quando il giocatore perde quando va nella room dove mostro punteggio,obiettivi etc come sfondo ci sia il momento nel quale ha perso. Ho provato a fare così:
obj_player:
Spoiler
create:

Codice: Seleziona tutto

global.surface=surface_create(view_wview_view_hview);
step:

Codice: Seleziona tutto

if global.vita<=0
{visible=false
obj_armi.visible=false
surface_set_target(global.surface);
with(all)
draw_self()
surface_reset_target()
room_goto(rm_fine);}
in un'altro oggetto nell'altra room

Codice: Seleziona tutto

if surface_exists(global.surface)
{draw_surface(global.surface,0,0)}
Facendo così non succede niente nell'altra room e non so come fare.

Jak
Admin
Messaggi: 12355
Iscritto il: 19/08/2009, 16:20
Specialità: Programmazione 3D
Uso: GM:Studio 2
Contatta:

Re: Salvare la schermata in una surface

Messaggio da Jak »

Su GM Studio puoi disegnare solo nell'evento draw, anche nelle surface.
E' una stronzata? Assolutamente si ma non ci si può fare nulla.
Ricordati comunque di disegnare anche lo sfondo, anzi forse ti conviene direttamente usare una seconda view che si riferisce ad usa surface e la attivi al momento del bisogno così sei sicuro che ti disegna tutto.
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you

Avatar utente
Sla
GMI VIP
Messaggi: 3618
Iscritto il: 21/07/2008, 10:11
Specialità: Titanismo
Località: (gm) Italia
Contatta:

Re: Salvare la schermata in una surface

Messaggio da Sla »

ma non c'è una funzione room_redraw o simile?
- setti il render target alla surface
- room redraw
- reset render target
fine

Se proprio non ti riesce manco così prendi uno screenshot..
eppure mi sembra tutto giusto...

Avatar utente
Cash
Membro super
Messaggi: 933
Iscritto il: 09/11/2013, 20:40
Uso: GM:Studio 1.4 Pro
Contatta:

Re: Salvare la schermata in una surface

Messaggio da Cash »

Sla ha scritto:ma non c'è una funzione room_redraw o simile?
- setti il render target alla surface
- room redraw
- reset render target
fine
Se proprio non ti riesce manco così prendi uno screenshot..
C'era screen_redraw ma su Studio è diventata obsoleta. Ho provato a fare come hai consigliato te e Xeryan e riesco a salvare lo screenshot ma poi non lo carica
Praticamente nello step event del personaggio ho fatto:

Codice: Seleziona tutto

if global.vita<=0{
screen_save("Death.png");
room_goto(rm_fine);}
Nel create event di un altro oggetto nell'altra room:

Codice: Seleziona tutto

if file_exists("Death.png")
background_morte=background_add("Death.png",false,false);
Nel draw event

Codice: Seleziona tutto

draw_background(background_morte,0,0);

Avatar utente
Cash
Membro super
Messaggi: 933
Iscritto il: 09/11/2013, 20:40
Uso: GM:Studio 1.4 Pro
Contatta:

Re: Salvare la schermata in una surface

Messaggio da Cash »

:first: Sono riuscito a risolvere! :first:
Il problema era che background_add restituisce l'index del background creato e draw_background non accetta index e quindi non disegnava niente. Per risolvere:il codice nella room da dove prendere lo screenshot è esatto,nell'altro oggetto nell'altra room basta fare nel create:

Codice: Seleziona tutto

if file_exists("Death.png")
{background_morte=background_add("Death.png",false,false);
background_index[0]=background_morte;//Sostituisco al background 0 della room lo screenshot
//Per ridimensionare lo screenshot alla room,senza lo screenshot non ci sta nella room
background_xscale[0]=room_width/background_width[0];
background_yscale[0]=room_height/background_height[0]}
e in room end

Codice: Seleziona tutto

background_delete(background_morte);
L'ultimo pezzo serve solo perchè sul manuale c'è scritto che quando si usa background_add se poi non si cancella il background potrebbero avvenire memory leaks che fanno crashare il gioco. Grazie a tuti :first:

Avatar utente
Cash
Membro super
Messaggi: 933
Iscritto il: 09/11/2013, 20:40
Uso: GM:Studio 1.4 Pro
Contatta:

Re: Salvare la schermata in una surface

Messaggio da Cash »

Xeryan ha scritto:come non accetta l' "index" ? ti posso assicurare che il tuo stesso codice a me funziona..
Non ne ho idea,a me non funzionava,vedevo la room vuota. Vabbè,l'importante è che funzioni

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 18 ospiti