Vous êtes sur la page 1sur 23

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

}

else

{

x

}

+= 4;

-= 4;

if (a == b && c == d) {faz algo if (a == b || c ==d) {faz algo if (a == b ^^ c == d) {faz algo

if (a < b) {do something if (a != b) {do something

}

}

}// and

}// or

} // xor

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

prender a estrutura em um laço de repetição determinado por ela.

until,

onde você define uma expressão que irá

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> ,

return <expression>

Exemplo:

Maior(valor1,valor2)

<arg15>);

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 ini 1

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

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

}

else

{

x

}

+= sign(device_get_tilt_y());

+= sign(device_get_tilt_x());

Z += sign(device_get_tilt_z());