Game Maker Language: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m Little edits |
|||
(11 versioni intermedie di 11 utenti non mostrate) | |||
Riga 1:
{{E|Tanti dettagli da guida del programmatore, nessuna fonte terza che evidenzi rilevanza al di fuori del software principale. Basta probabilmente riportare il succo alla voce [[Game Maker]]. Su en.wiki è già un redirect e le altre lingue non sono messe meglio|informatica|luglio 2023}}
{{F|
{{W|informatica|aprile 2018}}
{{
|immagine =
|didascalia =
|versione =
|utilizzo =
|paradigmi =
|tipizzazione =
|specifiche =
|estensione =
|influenzato_da =
|ha_influenzato =
|implementazione_riferimento =
|sistema_operativo =
|lingua =
|licenza =
|sito_web =
}}
'''Game Maker Language''' ('''GML''') è un [[linguaggio di scripting]] sviluppato per la creazione di videogiochi con [[Game Maker]]<ref>{{cita web |url=https://docs.yoyogames.com/index.html?page=source%2Fdadiospice%2F002_reference%2Findex.html |titolo=Game Maker: Studio ver. 1.4 |lingua=en |accesso=29 novembre 2017}}</ref>. Il GML possiede una sintassi che ricorda molto quella del [[C (linguaggio)|C]] o del [[JavaScript]].
È stato creato da [[Mark Overmars]] inizialmente per aiutare a completare il sistema di [[drag and drop]] del suo programma. Da quando [[
* Attraverso script per la creazione di funzioni personalizzate;
* Interagendo con gli eventi è possibile controllare il comportamento di tali oggetti;
Riga 14 ⟶ 32:
==Oggetti==
Se si desidera usare il GML è importante capire come funzionano gli oggetti in questo linguaggio.
# crea degli oggetti (vuoti) Esistono
# ad icone # a codice # ibrido (entrambi i precedenti). Mediante un [[editor grafico]] si inseriscono gli oggetti (ovvero si creano quelle che vengono chiamate "[[istanza di oggetto]]") in un'area denominata stanza.
Riga 27 ⟶ 49:
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).
* '''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)
Riga 35 ⟶ 57:
===Dichiarazione e assegnazione di dato a una variabile===
Come accade in molti linguaggi di scripting, anche in GML è prevista una dichiarazione implicita delle variabili, non sarà quindi necessario indicare tipo e dimensione della variabile a livello di definizione della stessa, quando si ha la necessità di un certo tipo di variabile si
L'[[assegnazione]] di un dato avviene nel seguente modo:
<syntaxhighlight lang="
nome_variabile = dato_che_vuoi;
</syntaxhighlight>
È chiaro che prima di accedere a una variabile bisogna almeno una volta fare un'assegnazione che ne inizializzi il valore.
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 booleani), sia function o script, il tutto combinato insieme mediante operatori (matematici, di stringa e booleani) a seconda di ciò che si vuole fare.
====Assegnazione relativa====
Una variabile può anche fare un calcolo su se stessa, a patto di essere già stata inizializzata. Un semplice esempio è dato dal contare: quando un software fa comparire a schermo un conto alla rovescia non fa altro che eseguire (ciclicamente) questo comando:
<syntaxhighlight lang="
tempo = tempo - 1
</syntaxhighlight>
<syntaxhighlight lang="
tempo -= 1
</syntaxhighlight>
Riga 59 ⟶ 81:
==Eventi==
Ecco alcuni eventi a disposizione del programmatore:
Riga 65 ⟶ 87:
* '''create_ev'''
* '''step_ev'''
* '''mouse_ev'''
* '''mouse_global_ev'''
* '''draw_ev'''
* '''any_key_press_ev'''
* '''any_key_pressed_ev'''
<syntaxhighlight lang="
any_key_pressed_ev
{
Riga 106 ⟶ 128:
</syntaxhighlight>
e equivalente a
<syntaxhighlight lang="
step_ev
if (keyboard_check_pressed(any_key))
Riga 117 ⟶ 139:
==Function==
<syntaxhighlight lang="
data_out = funct_name(data_in1, data_in2, data_in3 ecc.)
</syntaxhighlight>
Allo stesso modo se una function restituisce un dato significativo la parte "data_out =", sebbene generalmente consigliata, non è obbligatoria.
==If e blocchi di istruzioni==
Sintassi:
<syntaxhighlight lang="
if (condizione)
{
Riga 143 ⟶ 165:
</syntaxhighlight>
I
Esempio:
<syntaxhighlight lang="
if (num > 3)
{
Riga 156 ⟶ 178:
}
</syntaxhighlight>
Nel caso qui sopra l'espressione e data un test con il ">" ("se la variabile num ha un valore maggiore di 3 esegui il primo blocco di istruzioni altrimenti esegui il secondo"), invece in altri casi il test può essere generato da una function booleana (ovvero che restituisce valori booleani).
Esempio:
<syntaxhighlight lang="
if (instance_exists(oggetto_stella))
{
Riga 175 ⟶ 197:
Tutte le espressioni booleane restuituiscono valori booleani (true o false, 1 o 0, si o no, vero o falso) ma, in alcuni casi, possono avere in ingresso anche dati di altro tipo.
;
*'''==''' (simbolo alternativo: "=") - Doppio [[uguale]]. Questo operatore permette di confrontare 2 dati (numeri o stringhe) e restituisce un valore booleano. Più precisamente restituisce true in caso di uguaglianza tra i 2 dati, altrimenti false.
*''' != ''' (simbolo alternativo: "<>") - [[Diverso]]. Questo operatore permette di confrontare 2 dati (numeri o stringhe). Più precisamente restituisce true in caso di
;
*'''>''' - 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.
;
*'''&&''' - [[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.
Riga 199 ⟶ 221:
==Array==
Per esempio, usando le variabili:
<syntaxhighlight lang=
prova1 = 10
prova3 = 7
Riga 208 ⟶ 230:
prova40 = 9
</syntaxhighlight>
<syntaxhighlight lang=
prova[1] = 10
prova[3] = 7
Riga 223 ⟶ 245:
Notare che l'indice di partenza è (automaticamente) lo zero, se al [[programmatore]] sembra più comodo può anche partire da 1 (o anche da un valore qualunque), e comunque bene non partire da indici alti altrimenti ci saranno troppi valori allocati inutilmente.
Per rendere un array temporaneo (ovvero per liberare la memoria quando i dati non sono più necessari) bisogna crearlo come "variabile temporanea" (vedi sezione dedicata questa pagina alla sezione "variabili"
===Array monodimensionale===
<syntaxhighlight lang=
sintassi:
num[7] = 10;
</syntaxhighlight>
===Array bidimensionali===
<syntaxhighlight lang=
num[11,7] = 13
</syntaxhighlight>
===Array tridimensionali===
Riga 248 ⟶ 270:
* "ds_grid"=struttura di dati di tipo griglia
La differenza (oltre che nella sintassi) e che queste data structure sono corredate una [[serie di funzioni]] dedicate che gli array "classici" non hanno (almeno non nativamente).
==Nomenclatura degli elementi==
Quando si crea un nuovo progetto vengono creati oggetti, sprite, rooms, suoni ed altre cose (generalmente visibili in un sistema di cartelle posizionato in alto a sinistra dell'ide). A
Spesso si usano delle convenzioni che mirano a evitare ambiguità (che nella migliore delle ipotesi aumenta inutilmente il tempo necessario allo
# Prima convenzione:
#:<code>variabile_che_vuoi</code>▼
#:<code>obj_giocatore</code>▼
#:<code>spr_giocatore</code>▼
#:<code>snd_tuono</code>
#:(Notare che il secondo e il terzo senza prefisso sarebbero indistinguibili, nella migliore delle ipotesi il tutto funzionerà lo stesso, ma il rischio che qualcosa non funzioni o che il codice a lungo andare diventi confusionario è alto)▼
#:<code>variabile_che_vuoi</code>▼
#:<code>oGiocatore</code>
#:<code>sGiocatore</code>
#:<code>soTuono</code>
'''
▲variabile_che_vuoi
▲obj_giocatore
▲spr_giocatore
▲(Notare che il secondo e il terzo senza prefisso sarebbero indistinguibili, nella migliore delle ipotesi il tutto funzionerà lo stesso, ma il rischio che qualcosa non funzioni o che il codice a lungo andare diventi confusionario è alto)
▲'''convenzione 2)''', usata anche nel gioco [[Spelunky]] di [[Derek Yu]]
▲variabile_che_vuoi
▲i nomi di questi elementi:
* non possono contenere spazi vuoti
Riga 290 ⟶ 301:
== Esempi ==
=== Variabili ===
<syntaxhighlight lang=
//Le variabili inizializzate con "var" sono temporanee ed alla fine dell'esecuzione dello script vengono eliminate dalla memoria.
var str, name;
Riga 305 ⟶ 316:
=== Condizioni ===
<syntaxhighlight lang=
if(health<=0)
{
Riga 319 ⟶ 330:
=== While ===
<syntaxhighlight lang=
while(true)
{
Riga 331 ⟶ 342:
=== For ===
<syntaxhighlight lang=
for (i=0;i<ds_list_size(list);i++)
{
Riga 347 ⟶ 358:
== Collegamenti esterni ==
* {{Collegamenti esterni}}
* {{cita web|http://docs.yoyogames.com|Documentazione di Game Maker}}
* {{cita web|http://www.yoyogames.com|YoYo Games}}
|