is_undefined discrepanze fra Win e HTML5

Hai una curiosità o un problema con Game Maker? Domanda e ti sarà risposto!
Rispondi
Avatar utente
boxbuilder
Membro
Messaggi: 158
Iscritto il: 25/06/2015, 10:37
Specialità: programmatore
Uso: GM:Studio 1.4 HTML5
Contatta:

is_undefined discrepanze fra Win e HTML5

Messaggio da boxbuilder »

Ciao a tutti,
avrei bisogno di qualche chiarimento su un problema che mi sembra di aver notato sull'esportazione HTML5.

Praticamente da qualche parte ho una condizione su una ds_map per capire se un valore è già stato assegnato oppure no:

Codice: Seleziona tutto

if(is_undefined(my_map[? field])){
   ds_map_add(my_map, field, someValue);
   //do something...
}
tutto ciò funziona perfettamente esportando per windows e player game maker, ma mi sono accorto che se esporto per html5 il programma non entra in questa condizione...
Ho risolto il tutto modificando così:

Codice: Seleziona tutto

if(is_undefined(my_map[? field]) || my_map[? field] == 0){
   ds_map_add(my_map, field, someValue);
   //do something...
}
C'è qualcosa che mi sfugge o c'è un po' di inconsistenza fra l'esportazione per i vari moduli?

Cosa ne pensate?

Avatar utente
civic71
GMI Advanced
Messaggi: 2210
Iscritto il: 23/10/2003, 17:31
Specialità: Risotto con zucchine
Uso: GM:Studio 1.4 Pro
Località: Jesolo (venezia)
Contatta:

Re: is_undefined discrepanze fra Win e HTML5

Messaggio da civic71 »

Ipotizzo che nel primo caso my_map[? field] == null ; e non false quindi inserendo anche my_map[? field] == 0 ; il risultato cambia :hum:

Avatar utente
boxbuilder
Membro
Messaggi: 158
Iscritto il: 25/06/2015, 10:37
Specialità: programmatore
Uso: GM:Studio 1.4 HTML5
Contatta:

Re: is_undefined discrepanze fra Win e HTML5

Messaggio da boxbuilder »

civic71 ha scritto:Ipotizzo che nel primo caso my_map[? field] == null ; e non false quindi inserendo anche my_map[? field] == 0 ; il risultato cambia :hum:
Purtroppo c'è proprio qualcosa che non mi convince. Nella documentazione c'è scritto:

NOTE: If no such key exists then the function will return <undefined>. You should always check this using the is_undefined() function.

e infatti is_undefined(... restituisce correttamente true nell'exe.

Nell'HTML5 is_undefined(... retituisce false, mentre my_map[? field] == 0 restituisce true.

Indipendentemente dal mio essere confuso fra null e undefined resta il fatto che la funzione restituisca valori diversi a seconda di come sia stata compilata.

Avatar utente
GMI
Admin
Messaggi: 70
Iscritto il: 29/07/2013, 13:28
Contatta:

Re: is_undefined discrepanze fra Win e HTML5

Messaggio da GMI »

fai una veloce ricerca sul forum ufficiale e in caso riporta un bug
Brutto! ★☆☆☆☆

Avatar utente
civic71
GMI Advanced
Messaggi: 2210
Iscritto il: 23/10/2003, 17:31
Specialità: Risotto con zucchine
Uso: GM:Studio 1.4 Pro
Località: Jesolo (venezia)
Contatta:

Re: is_undefined discrepanze fra Win e HTML5

Messaggio da civic71 »

e infatti is_undefined(... restituisce correttamente true nell'exe.
Quindi nel tuo gioco tale variabile non è inizializzata nel create , ma poi nella versione html5 è come se lo fosse.
Se non erro è possibile vedere da GMS il codice html5 del gioco e quindi prova a controllarne se al principio viene inizializzata tale variabile;
Forse GMS compila il codice html5, inserendo al "principio" di default tutte le variabili utilizzate nel gioco ( seppur al valore false ) , anche quelle non inizializzate nei create ;

Avatar utente
boxbuilder
Membro
Messaggi: 158
Iscritto il: 25/06/2015, 10:37
Specialità: programmatore
Uso: GM:Studio 1.4 HTML5
Contatta:

Re: is_undefined discrepanze fra Win e HTML5

Messaggio da boxbuilder »

Ciao, la variabile my_map è inizializzata tramite ds_map_create, ma prima di creare la chiave specifica con ds_map_add faccio un check per vedere se sia già stata creata da un'altra parte.
Devo capire come vengono parsate le ds_map in html5, cosa che non è proprio elementare, dato che il codice viene offuscato.
Comunque quando troverò una risposta sarà mia premura postarla su questo fantastico forum.

Grazie a tutti!

Avatar utente
gameplay_extreme
GMI VIP
Messaggi: 3824
Iscritto il: 13/11/2010, 16:23
Uso: GM:Studio 2
Contatta:

Re: is_undefined discrepanze fra Win e HTML5

Messaggio da gameplay_extreme »

se esegui un progetto con target "html5" in DEBUG MODE l'offuscamento non dovrebbe avvenire
(il log a schermo dovrebbe visualizzare "obfuscation skipped" o qualcosa del genere)
Immagine
clicca sul logo qui sopra per info e download riguardo ai miei software o per sapere come si crea un videogioco!

iscriviti qui gratuitamente a GMI !
Spoiler
- Una curiosità: come mai quell' ordine ?
- Perché formava una scaletta molto carina da vedere.


"ah ah...grazie alla annotazione scientifica ti ho fregato!"
(come disse la calcolatrice al display)

Avatar utente
Tizzio
GMI Honor
Messaggi: 5836
Iscritto il: 29/06/2010, 23:43
Specialità: programmazione
Contatta:

Re: is_undefined discrepanze fra Win e HTML5

Messaggio da Tizzio »

boxbuilder ha scritto:Ciao, la variabile my_map è inizializzata tramite ds_map_create, ma prima di creare la chiave specifica con ds_map_add faccio un check per vedere se sia già stata creata da un'altra parte.
Devo capire come vengono parsate le ds_map in html5, cosa che non è proprio elementare, dato che il codice viene offuscato.
Comunque quando troverò una risposta sarà mia premura postarla su questo fantastico forum.

Grazie a tutti!
In teoria se lanci il gioco in debug (tasto rosso), il tuo codice non viene offuscato

Arcade Blues
Newbie
Messaggi: 47
Iscritto il: 09/01/2016, 12:05
Specialità: Sogno a occhi aperti
Uso: GM:Studio 1.4 Master
Località: Napoli
Contatta:

Re: is_undefined discrepanze fra Win e HTML5

Messaggio da Arcade Blues »

il codice dell' engine è sempre offuscato in debug mode le uniche cose non offuscate sono il tuo stesso codice e il nome delle variabili dell' engine entrambi offuscati in release mode.

Personalmente evito le map come la peste quindi non ne so gran che, ma di base ci sono cosi tante discrepanze in html5 che non mi meraviglio più.

Javascript implementa nativamente le mappe quindi credo che siano implementate sulla base dell' implementazione nativa ovvero tramite semplici object.
in javascript è corretto scrivere var mappa = {}; mappa["key"] = "value";

Nel mio codice utilizzo vari if per appianare le discrepanze.
E' importante che gli if siano basati su una costante (macro) e non su una variabile cosi che l'if venga eseguito in fase di compilazione e non di runtime.
E' un metodo brutto per risolvere un incompatibilità, ma molto sbrigativo.

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 44 ospiti