Post on 29-Dec-2015
Apostila GameMaker GML – GameMaker Language
Prof. Leonardo Antônio Alves
P á g i n a | 2
Sumário A linguagem GML (gamemaker language) ............................................................................................ 3
1.Comentário no código ....................................................................................................................... 3
2.Declaração de variáveis ..................................................................................................................... 3
3.Estrutura de programação ................................................................................................................. 4
4.Estrutura condicional - if .................................................................................................................... 4
5.Estrutura condicional - switch ............................................................................................................ 5
6.Laço de repetição - Repeat ................................................................................................................ 6
7.Laço de repetição - while ................................................................................................................... 6
8.Laço de repetição – do...until............................................................................................................. 7
9.Laço de repetição – for ...................................................................................................................... 7
10.Uso do Array .................................................................................................................................... 8
11.Estrutura de uma Função ................................................................................................................. 8
12.Uso do Break .................................................................................................................................... 9
13.Uso do continue ............................................................................................................................... 9
14.Uso do exit ..................................................................................................................................... 10
15.Expressão de conjunto - with ......................................................................................................... 10
16.Estrutura HTML .............................................................................................................................. 11
17.Estrutura de dados ......................................................................................................................... 12
17.1.A PILHA ....................................................................................................................................... 12
18.Estrutura de dados - lista ............................................................................................................... 14
19.COMANDO DRAW .......................................................................................................................... 16
20.DESENHANDO TEXTO ..................................................................................................................... 19
21.USO DE FONTES ............................................................................................................................. 21
22.DATA E HORA ................................................................................................................................. 21
23.TRABALHANDO COM SCORES ........................................................................................................ 22
24.GIRANDO DISPOSITIVO ANDROID E IOS ......................................................................................... 23
P á g i n a | 3
A linguagem GML (gamemaker language)
O gamemaker conta com uma linguagem própria de programação de scripts, a
Linguagem foi originalmente criada por Mark Overmars para complementar o
sistema de ação drag-and-drop usado no Game Maker.Atualmente todas as
ações drag-in-drop são traduzidas para GML pelo gamemaker.
1.Comentário no código
Você pode e deve utilizar comentários em seu código. Lembre-se sempre de
comentar.
//comentário de uma única linha
/*
comentário em linhas
comentário em linhas
*/
2.Declaração de variáveis
O gamemaker permite a declaração de variáveis apenas declarando um nome
para ela e o seu conteúdo. As variáveis podem ser locais, para uso dentro de
funções.
vidas = 12;
pontos = 100;
nome = "meu jogo";
distancia = 5.5;
tiros = -2;
Você também pode utilizar variáveis globais, acessando todo a em qualquer
ponto do jogo, em qualquer função criada.
globalvar comida; //declaração de variável
comida = 5; // inicializando a variável
global.comida = 5; //acessando de qualquer ponto
P á g i n a | 4
3.Estrutura de programação
Você poderá desenvolver seus scripts com utilizando as chaves para segmentar
seu programa como ocorre em linguagens como o C,C++ e Java.
{
<statement>;
<statement>;
...
}
4.Estrutura condicional - if
A estrutura condicional do if (se) segue o formato tradicional utilizado na
maioria das linguagens.
if (<expression>)
{
<statement>
...
<statement>
}
else
{
<statement>
}
Comparação
A == B Comparação, entre A e B.
A!=B A diferente de B
A > B A maior que B
A < B A menor que B
A >=B A maior ou igual a B
Funções lógicas
&& E (AND)
|| OU (OR)
^^ OU-EXCLUSIVO (XOR)
P á g i n a | 5
Exemplo de uso
if (x<200)
{
x += 4;
}
else
{
x -= 4;
}
if (a == b && c == d) {faz algo...}// and
if (a == b || c ==d) {faz algo...}// or
if (a == b ^^ c == d) {faz algo..} // xor
if (a < b) {do something...}
if (a != b) {do something...}
5.Estrutura condicional - switch
A estrutura condicional switch é uma estrutura condicional em lote, que
permite a verificação de uma expressão e a tomada de decisão múltipla em sua
execução. Possue a seguinte estrutura.
switch (<expression>)
{
case <expression1>: <statement1>; ... ; break;
case <expression2>: <statement2>; ... ; break;
...
default : <statement>;
}
Exemplo:
switch (keyboard_key)
{
case vk_left:
case ord("A"):
x -= 4;
break;
case vk_right:
P á g i n a | 6
case ord("D"):
x += 4;
break;
case vk_up:
case ord("W"):
y -= 4;
break;
case vk_down:
case ord("S"):
y += 4;
break;
}
Dica de como sortear um número em seu jogo usando irandom(<inteiro_teto>)
var i;
i = irandom(3);
6.Laço de repetição - Repeat
A Estrutura de repetição do repeat é um contador simples, que recebe um valor inteiro e promove a execução de um trecho de código um determinado numero de vezes.
repeat (<repetições>) <statement>
Exemplo
var i; i = 0; repeat(10) { // repete o trecho 10 i += 1; }
7.Laço de repetição - while
Estrutura de repetição condicional while, onde você define uma expressão que irá prender a
estrutura em um laço de repetição determinado por ela.
P á g i n a | 7
While(<expressão>) {<statement>}
Exemplo:
while (!place_free(x, y))
{
x = random(room_width);
y = random(room_height);
}
8.Laço de repetição – do...until
Estrutura de repetição condicional do..until, onde você define uma expressão que irá
prender a estrutura em um laço de repetição determinado por ela.
do {<statement>} until(<expressão>)
exemplo:
do
{
x = random(room_width);
y = random(room_height);
}
until (place_free(x, y)); }
9.Laço de repetição – for
Estrutura de repetição for, e uma estrutura de contagem, onde uma variável é
incrementada ou decrementada dentro da mesma.
for (<statement1> ; <expression> ;<statement2>) <statement3>
exemplo:
var i;
for (i = 0; i < 10; i += 1)
{
draw_text(32, 32 + (i * 32), string(i) + ". "+ string(scr[i]));
}
P á g i n a | 8
10.Uso do Array
Um array, que pode representar um vetor/matriz, pode representar as dimensões de um
vetor.
A[<endereço>] = <conteúdo>
Exemplo:
count = 0;
array[count] = "Hello"
count += 1;
array[count] = "How"
count += 1;
array[count] = "are"
count += 1;
array[count] = "you?"
count += 1;
Array de múltiplas dimensões. Pode ser representado.
A[<endereço>,<endereço>]
Exemplo:
array[0,0] = 1;
array[0,1] = "hello";
array[0,2] = 55.5;
11.Estrutura de uma Função
Uma função, pode ser escrita com uma assinatura ou conjunto de argumentos e um retorno
utilizando return.
<function>(<arg0>, <arg1> ,... <arg15>);
return <expression>
Exemplo:
Maior(valor1,valor2)
P á g i n a | 9
Return valor1>valor2;
A GML permite expressões diretas em uma função.
Exemplo:
if !is_real(argument0)
{
return 0;
}
else
{
return (argument0 * argument0);
}
if keyboard_check_pressed(vk_enter)
{
val = scr_sqr(amount);
}
12.Uso do Break
Como visto no uso do switch, o break pode ser aplicado nos laços de repetição,
para interromper o loop.
Break;
var i;
i = 0;
while (!place_free(x, y))
{
x = random(room_width);
y = random(room_height);
if i > 50 break else i+=1;
}
13.Uso do continue
O continue pode ser aplicado nos laços de repetição,
P á g i n a | 10
continue;
var i;
for (i = 0; i < 10; i += 1)
{
if array[i] = "" continue;
array[i] = "";
}
14.Uso do exit
Como o uso do exit, você pode interromper a execução da função ou
subprograma que seria executado, retornando o controle ao programa ou
trecho chamador.
Exit;
if invisble exit:
while (place_meeting(x, y))
{
x -= lengthir_x(1, direction - 180);
y -= lengthir_y(1, direction - 180);
}
15.Expressão de conjunto - with
O uso do with permite direcionar a quem será aplicado o trecho de código.
with (<expression>) <statement>
with (obj_ball)
{
x = random(room_width);
y = random(room_height);
}
P á g i n a | 11
16.Estrutura HTML
O gamemaker traz a possibilidade de utilização da função especial assíncrona
HTML, que permite o acesso de recursos web no seu programa.
Exemplo:
$http_origin = $_SERVER['HTTP_ORIGIN'];
if ($http_origin == "http://127.0.0.1:51268")
{
header('Access-Control-Allow-Origin: *');
}
Alguns comandos especiais do html podem ser aplicados com o get, que se
assemelha ao get usado no html. Capturando o conteúdo string da execução
para um estrutura.
http get(<url>)
exemplo:
http_get("http://www.YoYoGames.com/logon?username="+name);
get[0] = http_get("http://www.McSweeneyGames.com/logon?username=" + name);
Alguns comandos especiais do html podem ser aplicados com o post, que se
assemelha ao post usado no html. Capturando o conteúdo string da execução
para um estrutura.
http_post_string(<url>)
exemplo:
P á g i n a | 12
var str;
str = json_encode(game_info);
get[0] = http_post_string("http://www.angusgames.com/game?game_id=" + string(global.game_id),
str)
17.Estrutura de dados
O gamemaker implementa algumas estruturas de dados conhecidas, para
facilitar a vida dos desenvolvedores.
17.1.A PILHA
A primeira estrutura de dados criada é a pilha.
Criar Pilha
pilha = ds_stack_create();
destroir pilha
ds_stack_destroy(id);
limpar pilha
ds_stack_clear(id);
verificar se está vazia
retorno 0/1 ; false ou true
ds_stack_empty(AI_stack)
tamanho da pilha
num = ds_stack_size(control_stack);
P á g i n a | 13
copia pilha
ds_stack_copy(stack, other.stack);
lê o primeiro valor da pilha
m = ds_stack_top(control_stack);
pop() ou desempilhar
xx = ds_stack_pop(move_stack);
push() ou colocar dados na pilha
ds_stack_push(move_stack, x);
exemplo copiando pilha para arquivo ini1
stack = ds_stack_create();
var str;
ini_open("save.ini");
str = ini_read_string("Stacks", "0", "");
if str != ""
{
ds_stack_read(stack, str);
}
ini_close();
exemplo
var str;
ini_open("save.ini");
str =ds_stack_write(stack);
1 Os arquivos ini eram muito utilizados até o windows 98, pois possuíam uma estrutura que facilitava o uso e a busca.
P á g i n a | 14
ini_write_string("Stacks", "0", str);
ds_stack_clear(stack);
ini_close();
18.Estrutura de dados - lista
Outra estrutura de dados implementada pelo gamemaker é a lista.
criando lista
list = ds_list_create();
destruindo lista
ds_list_destroy(id);
Limpar lista
ds_list_clear(id);
se a lista esta vazia
ds_list_empty(command_list)
tamanho da lista
num = ds_list_size(control_list);
adicionar elemento a lista
ds_list_add(sc_list, score);
P á g i n a | 15
removendo elemento da lista
ds_list_delete(sc_list, 0);
buscando elemento na lista
pos = ds_list_find_index(list, "Player1");
inserindo elemento na lista em posição definida
ds_list_insert(id, pos, val);
substituir elemento na lista
ds_list_replace(id, pos, val);
ordena a lista
ds_list_sort(name_list);
copiar lista
ds_list_copy(old_list, main_list);
exemplo:
if !ds_list_empty(main_list)
{
old_list = ds_list_create();
ds_list_copy(old_list, main_list);
ds_list_clear(main_list);
}
ler lista
P á g i n a | 16
ds_list_read(id, str);
exemplo:
list = ds_list_create();
var str;
ini_open("save.ini");
str = ini_read_string("Lists", "0", "");
if str != ""
{
ds_list_read(list, str);
}
ini_close();
copiar string de dado de lista
str =ds_list_write(list);
var str;
ini_open("save.ini");
str =ds_list_write(list);
ini_write_string("Lists", "0", str);
ds_list_clear(list);
ini_close();
19.COMANDO DRAW
Com certeza esse será um comando muito utilizado por você, nele
exploraremos diversas funções que o gamemaker nos apresenta.
Dimensões de texto
tex_w = texture_get_width(sprite_get_texture(spr_Model_tex, 0));
texture_get_height(tex);
selecionando interpolação
if global.Smoothing
{
texture_set_interpolation(true);
}
P á g i n a | 17
else
{
texture_set_interpolation(false);
}
selecionando blending
if global.Blend
{
texture_set_blending(true);
}
else
{
texture_set_blending(false);
}
desenhando ponteiro do mouse
draw_arrow(x, y, mouse_x, mouse_y, 10);
desenhando circulo
draw_set_color(c_white);
draw_circle(100, 100, 50, true);
desenhando circulo
draw_circle_color(x, y, 100, c_white, c_black, false);
desenhando elipse
draw_set_color(c_white);
draw_ellipse(100, 100, 300, 200, false);
ou
draw_ellipse_color(50, 50, 200, 100, c_black, c_white, false);
P á g i n a | 18
desenhando linha
draw_set_color(c_lime);
draw_line(50,50,150,50);
ou
draw_line_color(50, 50, 300, 50, c_red, c_blue);
ou ainda,
draw_set_color(c_red);
draw_line_width(100, 100, 200, 200, 6);
desenhar ponto
draw_set_color(c_yellow);
draw_point(100,100);
ou
draw_point_color(50, 50, c_red);
desenhar retângulo
draw_set_color(c_yellow);
draw_rectangle(100, 100, 300, 200, true);
ou
draw_rectangle_color(50, 50, 200, 200, c_black, c_white, c_black, c_white, false);
retângulo com cantos arredondados
draw_set_color(c_lime);
draw_roundrect(50, 100, 250, 200, 0);
ou
draw_roundrect_color(50, 50, 200, 200, c_black, c_white, c_black, c_white, false);
desenhando triangulo
P á g i n a | 19
draw_set_color(c_aqua);
draw_triangle(50, 50, 200, 50, 50, 200, 0);
ou
draw_triangle_color(200, 200, 300, 200, 200, 300, c_red, c_blue, c_blue, false);
20.DESENHANDO TEXTO draw_text(x, y, string);
ou
draw_set_font(font);
draw_set_color(c_blue);
draw_text(200, 200, "Hello World" );
ou
draw_set_halign(halign);
ou
draw_set_halign(fa_left);
draw_text(100, 32, "Score : " + string(score));
draw_set_halign(fa_right);
draw_text(room_width - 100, 32, "Health : " + string(health));
exemplo score
draw_set_halign(fa_left);
draw_text(100, 32, "Score : " + string(score));
draw_set_halign(fa_right);
draw_text(room_width - 100, 32, "Health : " + string(health));
exemplo de posicionamento de texto.
fa_top Topo
fa_middle Meio
fa_bottom Em baixo
P á g i n a | 20
draw_set_halign(fa_center); draw_set_valign(fa_middle); draw_text(100, 32, "Score :”);
Digitação direta
exemplo
keyboard_string; // lê do teclado o conteúdo
draw_text_ext(100, 50, keyboard_string, 3, 300);
lendo com efeito
draw_text_ext_color(200, 200, keyboard_string, 5, 300, c_blue, c_blue, c_navy, c_navy, 1);
draw_set_halign(fa_center);
draw_set_valign(fa_middle);
image_angle += 1;
draw_text_ext_transformed(room_width / 2, room_height / 2, keyboard_string, 10, 300, 2, 2,
image_angle);
ou
draw_set_halign(fa_center);
draw_set_valign(fa_middle);
image_angle += 1;
draw_text_transformed_color(room_width / 2, room_height / 2, keyboard_string, 2, 2,
image_angle, c_red, c_red, c_yellow, c_yellow, 0.5);
efeito em texto
exemplo
health=12000;
draw_set_color(c_white);
draw_text(100, 100, "Health:");
draw_text_color(200, 100, string(health), c_lime, c_lime, c_green, c_green, 1);
P á g i n a | 21
Game over com Efeito
exemplo
draw_set_halign(fa_center);
draw_set_valign(fa_middle);
image_angle += 1;
draw_text_transformed(room_width / 2, room_height / 2, "GAME OVER!", 2, 2, image_angle);
21.USO DE FONTES
O Gamemaker permite o uso das fontes contidas no seu pc para implementar
em seus games novos recursos gráficos. Explore esse recurso.
exemplo
draw_set_font(fnt_Game);//abrindo uma fonte declarada
draw_set_color(c_blue);
draw_set_font(fnt_Game);
draw_text(200, 200, "Hello World" );
22.DATA E HORA
O gamemaker implementa funções de data e hora, para facilitar o seu
controle do tempo no jogo.
current_time; retorna o tempo desde o inicio do jogo em milissegundos.
Exemplo:
draw_text(32, 32, "The time is " + string(current_hour) + ":" + string(current_minute) + "." +
string(current_seconds));
P á g i n a | 22
exemplo:
draw_text((32, 32, "Today is " + string(current_day) + "/" + string (current_month) + "/" +
string(current_year) +".");
exemplo:
var day;
switch(current_weekday)
{
case 1: day = "Monday"; break;
case 2: day = "Tueasday"; break;
case 3: day = "Wednesday"; break;
case 4: day = "Thursday"; break;
case 5: day = "Friday"; break;
case 6: day = "Saturday"; break;
case 7: day = "Sonday"; break;
}
draw_text(32, 32, "Today is " + day +".");
O gamemaker também permite que você possa comparar datas
date_compare_datetime( date1, date2 );
exemplo:
d = date_compare_date( date_create_datetime( 2011, 9, 15, 11, 4, 0 ), date_current_datetime() );
23.TRABALHANDO COM SCORES
O gamemaker possue uma estrutura de scores já implementada para facilitar a
vida do desenvolvedor de jogos.
EXEMPLO
highscore_clear();
P á g i n a | 23
highscore_add("nome", 1);
highscore_add("nome2", 10);
draw_highscore(100, 100, room_width - 100, room_height -100);
24.GIRANDO DISPOSITIVO ANDROID E IOS
O gamemaker implementa a utilização de recursos oriundos do giroscópio do
dispositivo android ou do IOS. Ele captura o movimento em um dos eixos.
device_get_tilt_y()
device_get_tilt_x()
device_get_tilt_z()
exemplo:
if display_get_orientation() = display_landscape
{
x += sign(device_get_tilt_y());
}
else
{
x += sign(device_get_tilt_x());
}
Z += sign(device_get_tilt_z());