D3d_lighting in movimento

Argomenti riguardanti il D3D di GameMaker e librerie esterne.
Rispondi
Avatar utente
enick
GMI VIP
Messaggi: 3749
Iscritto il: 26/06/2011, 19:34
Specialità: 39dll e 3D
Località: Sardegna
Contatta:

D3d_lighting in movimento

Messaggio da enick »

Ho creato una sorta di torcia con d3d_light_define_point() che deve seguire il giocatore o meglio:
Questo è il draw event del mio oggetto light

d3d_light_define_point(6,x+100,y,z,100,c_white)
d3d_light_enable(6,true)
d3d_set_lighting(true)

e nello step
x=player.x
y=player.y

muovendo il mio player la luce si sposta seguendolo solo che i floors si illuminano mentre io mi muovo a scatti nel senso che come sono su un floor e mi muovo è ovviamente distinguibile il momento in cui si spegne un floor e si accende quello seguente.. ci passerà mezzo secondo se non di più.. e normale questo o è frutto di una mia scorretta organizzazione delle funzioni?

ps : il mio player nel draw event disattiva e attiva la luce per rimanere fuori dalla funzione di illuminazione infatti il player draw event è:
d3d_set_lighting(false)
draw_sprite_ext(image_index,0,x,y,0.4,0.4,image_angle,col,1)
d3d_set_lighting(true)

questa situazione si ripete per 3 o 4 oggetti sempre per lo stesso motivo.. puo essere questa magari la causa
Nicola porcu(Sardegna)
ImmagineImmagine
Immagine
Are you sleeping?
[email protected]

Avatar utente
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

Re: D3d_lighting in movimento

Messaggio da BaronVsCorsar »

se sei nel 3d perchè
draw_sprite_ext(image_index,0,x,y,0.4,0.4,image_angle,col,1);
? :confuso:

cmq dipende probabilmente dal tuo pavimento, che avrai creato tassellando tanti oggetti (vale a dire mettendo tanti istanze/oggetti in cui ognuno disegna un quadrato/rettangolo di pavimento in funzione della usa x ed y).
ogni oggetto "piastrella" ha una sua x ed y, unico punto delle coordinate che saranno considerate per la funzione luce, e queste x ed y sono posizionate a distanza tale che tra "spegnere" quella vecchia ed accendere quella nuova passa il mezzo secondo.

es:
a 10,10 piastrella_A
a 20,10 piastrella_B
raggio della luce 4.
quando sei a 10,15 non illumini nessuna delle due piastrelle.

Una possibile azione: disegna un finto pavimento attorno al personaggio senza utilizzare oggetti (se possibile), ad esempio aggiungendo il disegno del pavimento nello stesso codice in cui disegni il player (o la luce).
incrementa la zona in cui la luce agisce in modo che l'effetto avvenga lontano dalla camera e si noti meno.
usa in combinazione la nebbia per rendere meno evidente l'effetto.

Un'altra possibilità è che l'evento draw avvegna in momenti diversi. Se definisci la luce DOPO aver disegnato la piastrella ovviamente le cose non girano bene, ma dalla descrizione del problema non mi sembra il caso.
ImmagineSchiva questo - http:\\baronvscorsar.altervista.org
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?

Avatar utente
enick
GMI VIP
Messaggi: 3749
Iscritto il: 26/06/2011, 19:34
Specialità: 39dll e 3D
Località: Sardegna
Contatta:

Re: D3d_lighting in movimento

Messaggio da enick »

draw_sprite_ext(image_index,0,x,y,0.4,0.4,image_angle,col,1) perché +sto ancora lavorando al topdown ed il personaggio è in 2d, da quel che ho capito potrei far disegnare un floor che segue il personaggio cosi da essere in pratica sempre illuminato??
Nicola porcu(Sardegna)
ImmagineImmagine
Immagine
Are you sleeping?
[email protected]

Avatar utente
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

Re: D3d_lighting in movimento

Messaggio da BaronVsCorsar »

esatto, in quel modo eviti il salto della luce da un "quadrato" al successivo.
in questo modo però non hai oggetti (quindi niente collisioni) o tile, ma il pavimento è disegnato solo vicino a te: non sempre questa semplice soluzione può essere usata senza altre modifiche al programma!
(ad esempio, per il pavimento va bene, ma per i muri, se li fai a quadrettoni, non riesci ad utilizzarla così semplicemente).

Io per risolvere l'effetto sui muri uso 4 punti luce e non 1 solo disposti a quadrato attorno al personaggio, l'effetto (pur presente) si nota molto molto meno. Anche questa soluzione bisogna vedere se è applicabile nel tuo caso.
ImmagineSchiva questo - http:\\baronvscorsar.altervista.org
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?

Avatar utente
enick
GMI VIP
Messaggi: 3749
Iscritto il: 26/06/2011, 19:34
Specialità: 39dll e 3D
Località: Sardegna
Contatta:

Messaggio da enick »

Ma questo floor dovrebbe non avere alcuna texture??? perché ho una varieta di pavimenti con diverse texture quindi un pavimento che mi segue dovrebbe essere perlomeno invisbile come posso fare???
Nicola porcu(Sardegna)
ImmagineImmagine
Immagine
Are you sleeping?
[email protected]

Avatar utente
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

Re: D3d_lighting in movimento

Messaggio da BaronVsCorsar »

la texture non deve essere trasparente, deve essere quella del pavimento.

o gestisci il pavimento dentro l'oggetto player (e decidi quali texture mettere in funzione del valore di x e y),
oppure crei un oggetto pavimento che "insegue" il player e che in funzione della propria x e y decide quale texture usare.

ti consiglio per amor di semplicità di fare un tentativo con texture fissa, se il risultato è soddisfacente puoi fare anche i dettagli. :fapensare:
ImmagineSchiva questo - http:\\baronvscorsar.altervista.org
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?

Avatar utente
enick
GMI VIP
Messaggi: 3749
Iscritto il: 26/06/2011, 19:34
Specialità: 39dll e 3D
Località: Sardegna
Contatta:

Re: D3d_lighting in movimento

Messaggio da enick »

è una cosa un po complessa nel mio caso poiché i miei floor in pratica sono dei piu svariati strade prati ecc.. alcuni sono 5 o 6 volte piu grandi del player e immagino quanto possa essere sgradevole in una strada(provvista di linee segnaletiche) vederle scomparire magicamente al proprio passaggio.. sarebbe magari una soluzione costruire in torna al player un finto pavimento composto da esempio 8 piu piccoli floor che prendono la propria texture in base al floor che collidono(collisioni 2d) cosi da rendere l'effetto meno sgradevole..
Nicola porcu(Sardegna)
ImmagineImmagine
Immagine
Are you sleeping?
[email protected]

Avatar utente
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

Re: D3d_lighting in movimento

Messaggio da BaronVsCorsar »

è una buona idea.
ma prima verifica con la versione più semplice se l'effetto sgradevole ti sparisce, altrimenti è lavoro per nulla ;)
ImmagineSchiva questo - http:\\baronvscorsar.altervista.org
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 22 ospiti