23
Apostila GameMaker GML – GameMaker Language Prof. Leonardo Antônio Alves

Apostila GameMaker-parte1 (1).pdf

  • Upload
    vagrom

  • View
    115

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Apostila GameMaker-parte1 (1).pdf

Apostila GameMaker GML – GameMaker Language

Prof. Leonardo Antônio Alves

Page 2: Apostila GameMaker-parte1 (1).pdf

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

Page 3: Apostila GameMaker-parte1 (1).pdf

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

Page 4: Apostila GameMaker-parte1 (1).pdf

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)

Page 5: Apostila GameMaker-parte1 (1).pdf

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:

Page 6: Apostila GameMaker-parte1 (1).pdf

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.

Page 7: Apostila GameMaker-parte1 (1).pdf

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]));

}

Page 8: Apostila GameMaker-parte1 (1).pdf

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)

Page 9: Apostila GameMaker-parte1 (1).pdf

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,

Page 10: Apostila GameMaker-parte1 (1).pdf

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

}

Page 11: Apostila GameMaker-parte1 (1).pdf

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:

Page 12: Apostila GameMaker-parte1 (1).pdf

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

Page 13: Apostila GameMaker-parte1 (1).pdf

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.

Page 14: Apostila GameMaker-parte1 (1).pdf

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

Page 15: Apostila GameMaker-parte1 (1).pdf

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

Page 16: Apostila GameMaker-parte1 (1).pdf

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

}

Page 17: Apostila GameMaker-parte1 (1).pdf

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

Page 18: Apostila GameMaker-parte1 (1).pdf

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

Page 19: Apostila GameMaker-parte1 (1).pdf

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

Page 20: Apostila GameMaker-parte1 (1).pdf

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

Page 21: Apostila GameMaker-parte1 (1).pdf

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

Page 22: Apostila GameMaker-parte1 (1).pdf

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();

Page 23: Apostila GameMaker-parte1 (1).pdf

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());