Game Maker Language: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
aggiungo nuova sezione: nomenclatura degli elementi
m Fix link usando Preferenze | Accessori | Altro | Rivelatore di disambigue, WND
Riga 1:
{{tmp|linguaggio di programmazione}}
{{S|linguaggi di programmazione}}
'''Game Maker Language''' ('''GML)''') è un [[linguaggio di scripting]] sviluppato per la creazione di videogiochi con [[Game Maker]]. Il '''GML''' possiede una sintassi che ricorda molto quella del [[C (linguaggio)|C]] o del [[JavaScript]] ed per questa sua caratteristica esso viene insegnato in numerose scuole come "trampolino" per lo studio di altri linguaggi.
 
È stato creato da [[Mark Overmars]] inizialmente per aiutare a completare il sistema di [[drag and drop]] del suo programma. Da quando [[YoYoGames]] ha acquistato i diritti del programma, il '''GML''' è considerato l'unico mezzo di programmazione in [[Game Maker]].
 
==Oggetti==
Se si desidera usare il GML è importante capire come funzionano gli oggetti in questo linguaggio.
-* Come prima cosa il programmatore crea degli oggetti (vuoti)
 
-* e gli associa, se vuole, delle [[sprite (informatica)|sprite]] (ovvero degli elementi grafici),
- Come prima cosa il programmatore crea degli oggetti (vuoti)
-* poi li "rimepieriempie" inserendo una programmazione (basata sugli eventi).
 
- e gli associa, se vuole, delle [[sprite]] (ovvero degli elementi grafici),
 
- poi li "rimepie" inserendo una programmazione (basata sugli eventi).
 
Esistono 3 tipi di programmazione: 1) ad icone 2) a codice 3) ibrido (entrambi i precedenti).
Riga 18 ⟶ 15:
- A questo punto, mediante un [[editor grafico]] si inseriscono gli oggetti (ovvero si creano quelle che vengono chiamate "[[istanza di oggetto]]") in un'area denominata stanza.
 
Da notare che molteplici istanze dello stesso oggetto (se l'oggetto è stato programmato in tal senso) agiranno l'una rispetto all'altra in maniera autonoma. Gli oggetti che non avranno istanze (ovvero che non sono inseriti nella stanza) non funzioneranno (la loro [[programmazione]] verrà ignorata). le istanze, oltre che mediante editor grafico, possono anche essere create dinamicamente (in qualsiasi momento) da un'altra istanza (non necessariamente dello stesso oggetto) o dal creation code della room stessa durante l'esecuzione del [[software]].
 
==Variabili==
La divisione per tipi di dato è piuttosto semplice, esistono solo 2 tipi di [[Variabile (informatica)|variabili]]: numeriche e stringhe (le variabili booleane sono considerate come di tipo numerico: tecnicamente non formano un tipo di dati a parte).
 
esiste anche una divisione (indifferentemente dal tipo di dati contenuto) in variabili globali, di istanza e temporanee
 
* '''- globali''': a ogni nome univoco ne corrisponde una sola, che è accessibile e modificabile da un codice che può essere posto indistintamente in qualsiasi [[script]] o qualunque [[evento]] di qualunque oggetto
 
* '''- di istanza''': a ogni nome univoco ne possono corrispondere molteplici: una per oggetto (o più precisamente una per istanza di oggetto)
 
* '''- temporanee''': a ogni nome univoco ne possono corrispondere molteplici: una per script o piece of code (ogni evento può avere uno o più "piece of code") dove è posizionata. Questo tipo di variabili è da considerarsi completamente privato (a differenza di delle variabili di istanza), ovvero uno script o piece of code che generano una variabile temporanea hanno accesso unico a quella variabile (la quale comunque verrà rimossa alla fine del "piece of code" in cui era dichiarata).
'''- di istanza''': a ogni nome univoco ne possono corrispondere molteplici: una per oggetto (o più precisamente una per istanza di oggetto)
 
In game maker language esistono anche variabili dette built-in (sono più di 150). A differenza delle normali variabili, in cui nome è logica di funzionamento vengono decisi dal programmatore, queste sono variabili prestabilite dal creatore del linguaggio: è necessario leggere l'utilizzo una per una sul manuale. Alcune di esse (marchiate nel manuale con un asterisco) sono dette "variabili built-in di sola lettura", da non confondere con le costanti.
'''- temporanee''': a ogni nome univoco ne possono corrispondere molteplici: una per script o piece of code (ogni evento può avere uno o più "piece of code") dove è posizionata. Questo tipo di variabili è da considerarsi completamente privato (a differenza di delle variabili di istanza), ovvero uno script o piece of code che generano una variabile temporanea hanno accesso unico a quella variabile (la quale comunque verrà rimossa alla fine del "piece of code" in cui era dichiarata).
 
In game maker language esistono anche variabili dette built-in (sono più di 150). A differenza delle normali variabili, in cui nome è logica di funzionamento vengono decisi dal programmatore, queste sono variabili prestabilite dal creatore del linguaggio: è necessario leggere l'utilizzo una per una sul manuale. Alcune di esse (marchiate nel manuale con un asterisco) sono dette "variabili built-in di sola lettura", da non confondere con le costanti.
===Dichiarazione e assegnazione di dato a una variabile===
In questo linguaggio, in realtà, non esiste una dichiarazione nel quale si definiscono quale tipi di dato si andrà a mettere nelle variabili, semplicemente quando si vuole creare un certo tipo di variabile si effettua direttamente l'inizializzazione. Fanno eccezione le variabili dichiarate con globalvar e var, le quali hanno quindi una dichiarazione (ma anche in questo caso non verrà definito quale tipo di dati si verrà a inserire in esse).
Riga 39 ⟶ 37:
nome_variabile = dato_che_vuoi;
</source>
E' chiaro che prima di accedere a una variabile bisogna almeno una volta fare un' assegnazione (in questo caso detta [[inizializzazione]], intesa come inserimento dei valori iniziali).
 
Da notare che "dato_che_vuoi" oltre che essere un semplice dato, può anche essere espressione che coinvolge sia variabili, sia valori (stringhe, numeri o booleni), sia function o script, il tutto combinato insieme mediante operatori (matematici, di stringa e booleani) a seconda di ciò che si vuole fare. NB: l' ordine di computazione della espressione e da sinistra a destra, per cambiare tale ordine si possono usare delle [[parentesi tonde]].
Riga 54 ⟶ 52:
Le assegnazioni alle built-in avvengono come qualunque assegnazione, l'unica differenza (per quanto riguarda le assegnazioni) e che esse hanno già un' inizializzazione.
==Eventi==
il GML è un linguaggio basato sugli [[eventi]]: ogni gruppo di istruzioni va posizionato in un evento (la scelta dell' eventevento dipende da "quando" si vuole che un determinato blocco entri in azione), cioè, in pratica, il programmatore deve specificare quando, ogni sequenza di istruzioni, deve entrare in funzione.
 
Ecco alcuni eventi a disposizione del programmatore:
Riga 60 ⟶ 58:
* '''create_ev'''
 
il [[codice]] in esso contenuto viene eseguito all'avvio del programma
 
* '''step_ev'''
Riga 115 ⟶ 113:
</source>
==Function==
le [[Funzione (informatica)|function]] hanno questa sintassi
<source lang=gml>
data_out = funct_name(data_in1, data_in2, data_in3 ecc.)
Riga 183 ⟶ 181:
'''>'''
 
[[maggiore]]. Restituisce true in caso il valore a sinistra sia più alto di quello di destra.
 
'''<'''
 
[[minore]]. Restituisce true in caso di valore di sinistra sia più piccolo di quello di destra.
 
:* '''operatori che prendono in ingresso valori booleani
'''&&'''
 
[[Algebra_di_Boole#AND|and]]. Se 2 o più espressioni booleane sono unite da dei &&, il risultato dell' espressione finale sarà true solo se il risultato di tutte le sottoespressioni è true.
 
'''||'''
 
[[Algebra_di_Boole#OR|or]]. Se 2 o più espressioni booleane sono unite da dei ||, il risultato dell' espressione finale sarà true solo se il risultato di almeno una delle sottoespressioni è true.
 
'''^^'''
 
[[Algebra_di_Boole#XOR|xor]]. Se 2 o più espressioni che booleane sono unite da dei ^^, il risultato dell' espressione finale sarà true solo se il risultato di una sola delle sottoespressioni è true.
 
''' ! '''
 
[[Algebra_di_Boole#NOT|not]]. Inverte un'espressione passandola a false (se era true) oppure a true (se era false). Notare che due not consecutivi si annullano, ovvero le espressioni "!(!(true))" è "(true)" sono equivalenti.
 
'''note:'''
Riga 218 ⟶ 216:
 
==Eliminare ridondanza non necessaria==
la [[ridondanza]] di parti non necessarie può causare avere un software ingombrante, caotico e difficile da mantenere. Per evitare ciò esistono gli '''script''' e la '''parentela tra oggetti'''
===script===
definizione secondo il manuale di game maker:
Riga 233 ⟶ 231:
E' da notare che i valori restituiti non possono essere più di 1 per chiamata.
===parentela tra oggetti===
in GML la '''parentela tra oggetti''' è un modo per ridurre la [[ridondanza]] dei codici di un progetto, al fine di ottenere un software meno ingombrante, meno caotico e più mantenibile.
 
Per ogni oggetto si può definire un oggetto parent (=padre). NB: non è detto che a oggetto diverso corrisponda oggetto parent diverso.