Você está na página 1de 23

Apostila GameMaker

GML GameMaker Language

Prof. Leonardo Antnio Alves

Pgina |2

Sumrio
A linguagem GML (gamemaker language) ............................................................................................ 3
1.Comentrio no cdigo ....................................................................................................................... 3
2.Declarao de variveis ..................................................................................................................... 3
3.Estrutura de programao ................................................................................................................. 4
4.Estrutura condicional - if .................................................................................................................... 4
5.Estrutura condicional - switch ............................................................................................................ 5
6.Lao de repetio - Repeat ................................................................................................................ 6
7.Lao de repetio - while ................................................................................................................... 6
8.Lao de repetio do...until............................................................................................................. 7
9.Lao de repetio for ...................................................................................................................... 7
10.Uso do Array .................................................................................................................................... 8
11.Estrutura de uma Funo ................................................................................................................. 8
12.Uso do Break .................................................................................................................................... 9
13.Uso do continue ............................................................................................................................... 9
14.Uso do exit ..................................................................................................................................... 10
15.Expresso 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

Pgina |3

A linguagem GML (gamemaker language)


O gamemaker conta com uma linguagem prpria de programao de scripts, a
Linguagem foi originalmente criada por Mark Overmars para complementar o
sistema de ao drag-and-drop usado no Game Maker.Atualmente todas as
aes drag-in-drop so traduzidas para GML pelo gamemaker.

1.Comentrio no cdigo
Voc pode e deve utilizar comentrios em seu cdigo. Lembre-se sempre de
comentar.
//comentrio de uma nica linha
/*
comentrio em linhas
comentrio em linhas
*/

2.Declarao de variveis
O gamemaker permite a declarao de variveis apenas declarando um nome
para ela e o seu contedo. As variveis podem ser locais, para uso dentro de
funes.
vidas = 12;
pontos = 100;
nome = "meu jogo";
distancia = 5.5;
tiros = -2;

Voc tambm pode utilizar variveis globais, acessando todo a em qualquer


ponto do jogo, em qualquer funo criada.
globalvar comida; //declarao de varivel
comida = 5; // inicializando a varivel
global.comida = 5; //acessando de qualquer ponto

Pgina |4

3.Estrutura de programao
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>
}

A == B
A!=B
A>B
A<B
A >=B
&&
||
^^

Comparao
Comparao, entre A
e B.
A diferente de B
A maior que B
A menor que B
A maior ou igual a B
Funes lgicas
E (AND)
OU (OR)
OU-EXCLUSIVO (XOR)

Pgina |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 verificao de uma expresso e a tomada de deciso mltipla em sua
execuo. 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:

Pgina |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 nmero em seu jogo usando irandom(<inteiro_teto>)


var i;
i = irandom(3);

6.Lao de repetio - Repeat


A Estrutura de repetio do repeat um contador simples, que recebe um valor inteiro e
promove a execuo de um trecho de cdigo um determinado numero de vezes.

repeat (<repeties>) <statement>


Exemplo
var i;
i = 0;
repeat(10)
{
// repete o trecho 10
i += 1;
}

7.Lao de repetio - while


Estrutura de repetio condicional while, onde voc define uma expresso que ir prender a
estrutura em um lao de repetio determinado por ela.

Pgina |7

While(<expresso>) {<statement>}

Exemplo:
while (!place_free(x, y))
{
x = random(room_width);
y = random(room_height);
}

8.Lao de repetio do...until


Estrutura de repetio condicional do..until, onde voc define uma expresso que ir
prender a estrutura em um lao de repetio determinado por ela.
do {<statement>} until(<expresso>)
exemplo:
do
{
x = random(room_width);
y = random(room_height);
}
until (place_free(x, y)); }

9.Lao de repetio for


Estrutura de repetio for, e uma estrutura de contagem, onde uma varivel
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]));
}

Pgina |8

10.Uso do Array
Um array, que pode representar um vetor/matriz, pode representar as dimenses de um
vetor.
A[<endereo>] = <contedo>
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 mltiplas dimenses. Pode ser representado.


A[<endereo>,<endereo>]
Exemplo:
array[0,0] = 1;
array[0,1] = "hello";
array[0,2] = 55.5;

11.Estrutura de uma Funo


Uma funo, 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)

Pgina |9
Return valor1>valor2;

A GML permite expresses diretas em uma funo.


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 laos de repetio,
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 laos de repetio,

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 execuo da funo 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.Expresso de conjunto - with


O uso do with permite direcionar a quem ser aplicado o trecho de cdigo.
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 utilizao da funo especial assncrona
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 contedo string da execuo
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 contedo string da execuo
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);

Os arquivos ini eram muito utilizados at o windows 98, pois possuam 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 posio 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 funes que o gamemaker nos apresenta.

Dimenses de texto
tex_w = texture_get_width(sprite_get_texture(spr_Model_tex, 0));
texture_get_height(tex);

selecionando interpolao
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 retngulo
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);

retngulo 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 :);

Digitao direta
exemplo
keyboard_string; // l do teclado o contedo
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 grficos. 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 funes 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 tambm 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 utilizao de recursos oriundos do giroscpio 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());