Pagina 1 di 1

Buio ambientale + lanterna pg

Inviato: 24/02/2014, 17:51
da BotaniciTraffici
PREMESSA
Ciao a tutti, voglio condividere questo semplice codice per chi è alle prime armi con GM e vorrebbe realizzare l'effetto di una lanterna che segue il giocatore nella notte.

Il codice non ha nulla di speciale, ma può tornare utile per chi volesse imparare una cosina in più... che non fa mai male.

REQUITISI
Avete il vostro giocatore che si muove nel mondo e una view che lo segue. Il vostro pg illumina intorno a lui come se avesse una lanterna. Ovviamente sto parlando di 2d. Questo semplice e veloce sistema va bene sia per giochi side che topview, anche isometrici.

FASE 1: LUCE AMBIENTALE
Per prima cosa crea un'oggetto e chiamalo obj_luce_ambientale Questo oggetto va inserito nella room e serve a mostrare l'effetto notte. In poche parole scurisce tutto quello che c'è nella view.

Nel create dell'oggetto crei una surface delle dimensioni della view:

Codice: Seleziona tutto

luce=surface_create(view_wview,view_hview);
Nello step disegna un rettangolo che copre la view

Codice: Seleziona tutto

surface_set_target(luce);
draw_set_color(c_ltgray);
draw_rectangle(0,0,view_wview,view_hview,false);
surface_reset_target();
Nel draw disegna la surface

Codice: Seleziona tutto

draw_set_blend_mode(bm_subtract);
draw_surface(luce,view_xview,view_yview);
draw_set_blend_mode(bm_normal);
FASE 2: LA LANTERNA
Se hai già un'oggetto lanterna che segue il tuo giocatore applica il codice seguente, altrimenti crea un oggetto nuovo e fai in modo che lo segua

Nell'end step disegna "la luce" della lanterna. La variabile grandezza puoi modificarla a piacere a seconda delle tue necessità.
Quello che fai è disegnare un cerchio attorno al pg (o alla lanterna, se ne hai una). I 4 punti del cerchio li calcoli in automatico in base alla grandezza che hai inserito. La luce viene anche posizionata in relazione alla view. (esamina il draw_ellipse_color per capire come funziona)

Codice: Seleziona tutto

grandezza=200;
draw_set_blend_mode(bm_subtract);
surface_set_target(obj_luce_ambientale.luce);
draw_ellipse_color(x-grandezza/2-view_xview,y-grandezza/2-view_yview,x+grandezza/2-view_xview,y+grandezza/2-view_yview,c_white,c_black,false);
surface_reset_target();
draw_set_blend_mode(bm_normal);
CONCLUSIONE
E' possibile incollare l'ultimo codice che ho scritto nell'end_step di qualsiasi oggetto volete che faccia una luce radiale.
Questo è un modo molto semplice e veloce per risolvere uno dei problemi più comuni ai makers, ma è solo un punto di partenza per chi vuole capire il funzionamento delle surface e del blending.

Re: Buio ambientale + lanterna pg

Inviato: 24/02/2014, 18:46
da Cash
Devo imparare ad usare le surfaces,comunque hai fatto un piccolo errore:in questo codice

Codice: Seleziona tutto

draw_set_blend_mode(bm_subtract);
draw_surface(light,view_xview,view_yview);
draw_set_blend_mode(bm_normal);
hai confuso la variabile light con quella luce,il codice giusto dovrebbe essere

Codice: Seleziona tutto

draw_set_blend_mode(bm_subtract);
draw_surface(luce,view_xview,view_yview);
draw_set_blend_mode(bm_normal);

Re: Buio ambientale + lanterna pg

Inviato: 24/02/2014, 18:49
da BotaniciTraffici
Grazie ;-) E' che io uso sempre nomi in inglese quando uso GM mentre qui ho voluto metterlo in italiano per una maggior comprensione di tutti. Aggiusto subito. :sisisi:

Re: Buio ambientale + lanterna pg

Inviato: 18/05/2014, 16:41
da legogo
Mi hai salvato BT evviva! Ora ho risolto un problema per il mio gioco

Re: Buio ambientale + lanterna pg

Inviato: 17/06/2014, 8:57
da scritti9212
Grazie, oltre ad avermi fatto imparare qualcosa di nuovo, questo codice (leggermente modificato) può essermi utile in un mio gioco, vuoi che ti metta nei credits?

Re: Buio ambientale + lanterna pg

Inviato: 18/06/2014, 15:09
da scritti9212
Ho un piccolo problema: ho usato questo codice modificando solo il colore, e le dimensioni (tramite l'uso di una variabile e di una time line ho fatto in modo che si ingrandisse e rimpicciolisse leggermente, per dare l'effetto l'anterna) ma il buio rimane sempre in secondo piano, quindi chiaramente l'effetto non funziona! Ho provato a modificare anche le depth ma neanche così ho risolto...che devo fare?

Re: Buio ambientale + lanterna pg

Inviato: 18/06/2014, 16:03
da pacmino
a me viene così, la depth l'ho messa a -50 per l'oggetto obj_luce_ambientale

Immagine

Re: Buio ambientale + lanterna pg

Inviato: 18/06/2014, 16:46
da scritti9212
Ho notato che non centra il depth, è il viola che non viene "nascosto"

Re: Buio ambientale + lanterna pg

Inviato: 18/06/2014, 18:12
da Cash
scritti9212 ha scritto:Ho un piccolo problema: ho usato questo codice modificando solo il colore, e le dimensioni (tramite l'uso di una variabile e di una time line ho fatto in modo che si ingrandisse e rimpicciolisse leggermente, per dare l'effetto l'anterna) ma il buio rimane sempre in secondo piano, quindi chiaramente l'effetto non funziona! Ho provato a modificare anche le depth ma neanche così ho risolto...che devo fare?
Hai modificato il colore di cosa?Della lanterna o del buio?Perchè non puoi modificare quello della lanterna,devi farti un altro sistema

Re: Buio ambientale + lanterna pg

Inviato: 19/06/2014, 7:29
da scritti9212
Ho modificato il colore dello sfondo e ho messo giallo, poi al posto di del grigio chiaro ho messo "yellow" e gli oggetti sono tutti neri così ora viene l'effetto che volevo: l'alone attorno al personaggio giallo che si interrompe quando c'è un muro