Você está na página 1de 14

[TUTO] Criando um Game de Plataforma [TUTO]

 por X-Games em Ter Set 14, 2010 5:52 pm

Fazendo um game de Plataforma


Olá, hoje vou ensinar a fazer um game de plataforma completo! Meu nome é Allison e
esse é meu tutorial numero 2.

Categoria: Tutorial
Gênero: Plataforma
Plataforma: Game Maker 8 PRO
Nível: Iniciante
Créditos: Allison
Vamos Ao Trabalho

Primeiro precisamos ter as sprites prontas, vamos usar as sprites do maze-plataform que
já vem instalado com o Game Maker, procure a pasta do Game Maker, creio que foi
instalado no Disco C/, depois de achado vá na pasta: Sprites e depois em maze-
plataform se você achou ótimo, agora já sabemos onde estão os sprites.Agora abra seu
Game maker coloque as sprites:

explorer_left_strip8 = player_esquerda
explorer_right_strip8 = player_direita
explorer_jumpleft = player_pulando_dir
explorer_jumpright = player_pulando_esq
wall_block = bloco
gem_green_sparkle_strip32 = moeda
apple = maçã
key_gold_sparkle_strip32 = chave
chest_reinforced_closed = bau_fechado
chest_reinforced_open = baú_aberto
gold_bar_sparkle_strip32 = barra_de_ouro
item_life = vida
exitsign = sair

Teremos outro tipo de sprite, a do inimigo, que não consegui achar na pasta do Maze-
plataform então passarei a imagem e vocês colocam lá ok ? as imagens são:

vocês salvam essa imagem e giram para o lado oposto depois faça um strip das
duas ou melhor, uma animação, se você não sabe pergunta para alguem ou vbr algum
tutorial o neme dele será: inimigo_direita e inimigo_esquerda
os nomes que estão depois de (=) são o nome que vocês deveram dar aos sprites, crie
objetos com todas menos o player que é só 1 objeto para as suas sprites, para fazer os
sprites do player parado basta copiar a primeira imagem do player e depois criar outra
sprite e colar, é muito simples, os objetos deveram ter os mesmos nomes só que antes da
palavra o nome (obj_)por exemplo, obj_bloco, obj_bau_aberto deverá ficar mais ou
menos assim:

Expandir esta imagemReduzir esta imagem Ver em tamanho real


Vamos agora programar o mais importante: o player
Adicione um evento Creat nele e coloque:

Código:
image_speed=0.5; //É a velocidade da animação do nosso
personagem. Aqui, você pode colocar o valor que desejar.
parado=true; //Variável para indicar se o personagem está parado
ou não.
andando=false; //Variável para indicar se nosso personagem está
andando ou não.
noar=false; //O valor dela vai indicar se o personagem está no
ar ou não. Importante para a checagem dos sprites.
lado=0; //O lado para que o nosso personagem está virado. 1
seria virado para a direita e 0 para a esquerda

Pronto, já declaramos as variáveis agora falta fazer ele se movimentar, coloque no step:

Código:
/////////////////////////////////Gravidade//////////////////////
//////////
if (place_free(x,y+1)) //Checa se 1 pixel abaixo está vazio, ou
seja, não tem chão.
{gravity=0.5; noar=true;
//Coloca valor na gravidade e define a variável noar para true,
ou seja, o personagem não está no chão.
} else
 //Se a expressão place_free for falsa, ou seja, tenha chão
embaixo:
 {gravity=0; noar=false; //Gravidade se torna zero e a variável
noar se torna false, ou seja, o personagem está no chão.
 }

////////////////////////////Definiões de
pulo////////////////////////////
if (keyboard_check_pressed(vk_up)) && ! (place_free(x,y+1))
//Checa se a tecla de direção cima foi pressionada e se NÃO tem
um pixel livre abaixo.
{
vspeed=-8; noar=true; //Se for verdade, velocidade vertical se
torna 5 negativo e a variávell noar se torna true, ou seja, o
personagem NÃO está no chão.
}

if (vspeed>12) //Checa se a velocidadevertical do personagem


possui um valor maior que 12.
vspeed=12; //Se tiver, o valor se torna 12. Isso serve para que
o personagem não ultrapasse grandes velocidades verticais,
podendo causar bugs no jogo.

if (keyboard_check(vk_left)) && ! (keyboard_check(vk_right)) &&


(place_free(x-3,y)) //Checa se a tecla de direção esquerda está
sendo pressionada, se a tecla direita NÃO está sendo pressionada
e se tem 3 pixels de espaço à esquerda.
{x-=3.5; lado=0; andando=true; parado=false; //Caso a expressão
acima seja verdadeira, o personagem se move 3 pixels a esquerda,
virá para a esquerda de acordo com a variável lado, a variável
andando se torna true para indicar que o personagem está andando
e a variável parado se torna false, ou seja, o personagem NÃO
está parado.
}

if (keyboard_check(vk_right)) && ! (keyboard_check(vk_left)) &&


(place_free(x+3,y)) //Mesmo de cima, só que dessa vez, checamos
se a tecla de direção direita está sendo pressionada, se a tecla
de direção esquerda NÃO está sendo pressionada e se tem 3 pixels
à direita livre.
{x+=3.5; lado=1; andando=true; parado=false; //A mesma coisa do
evento anterior. A única coisa que muda é que aqui o personagem
se move 3 pixels a direita e a variável lado se torna 1, ou
seja, ele vira pra direita.
}

if ! (keyboard_check(vk_left)) && !
(keyboard_check(vk_right)) //Checa se a tecla direita e a tecla
esquerda não estão sendo precionadas.
{andando=false; parado=true; //Caso seja verdade, a variável
andando se torna false, ou seja, o personagem NÃO está andando.
E a variável parado se torna true, ou seja, o personagem está
parado.
}

//////////////////////////////////Sprites///////////////////////
/////////////
if (noar==false) //Checa se o personagem está no ar.

{
if (andando=true) && (lado==1) //Checa se o personagem está
andando e se ele está virado para a direita.
{
sprite_index=player_direita; //Se sim, a sprite dele se torna a
sprite do personagem andando para a direita.
}
if (andando=true) && (lado==0) //Checa se o personagem está
andando e se ele está virado para a esquerda.
{
sprite_index=player_esquerda; //Se sim, o sprite dele se torna a
sprite do personagem andando para a esquerda.
}
if (andando==false) && (parado==true) && (lado==1) //Se o
personagem não está andando, se o personagem está parado e está
virado para a direita:
{
sprite_index=player_parado_dir; //Se sim, a sprite dele se torna
a sprite do personagem parado para a direita.
}
if (andando==false) && (parado==true) && (lado==0) //Se o
personagem não está andando, está parado e está virado para a
esquerda:
{
sprite_index=player_parado_esq; //Se sim, a sprite dele se torna
o sprite do personagem parado para a esquerda.
}
}
else //Caso o personagem NÃO esteja com os pés no chão:
{
if (vspeed>0) || (vspeed<0) && (lado==1) //Se ele está pulando
ou caindo e está virado para a direita:
{
sprite_index=player_pulando_dir; //O sprite do personagem se
torna o sprite dele pulando para a direita.
}
if (vspeed>0) || (vspeed<0) && (lado==0) //Se o personagem está
pulando ou caindo e está virado para a esquerda:
{
sprite_index=player_pulando_esq; //O sprite do personagem se
torna o sprute dele pulando para a esquerda.
}
}

Pronto agora ele já sabe andar, mais... cadê o chão ? Isso, bem lembrado precisamos de
um chão que será o obj_bloco abra-o e marque como sólido que fica no canto esquerdo
da janela que abriu, va no obj_player novamente e crie uma colisão com o obj_bloco e
coloque o seguinte código:

Código:
move_contact_solid(direction,12);
vspeed=0;

agora vamos para a mask do player, crie uma nova sprite e crie um quadrado um pouco
maior doque o player (você pode utilizar o editor de sprites do GM se quiser) e defina
como a mask do player.

Agora vamos ver como ficou!! Crie uma nova room e nela faça a plataforma dos
obj_bloco e coloque o player e qualquer ponto como esse:

Expandir esta imagemReduzir esta imagem Ver em tamanho real


Teste seu jogo e repare muito nos sprites, repare que eles estão mudando ao você fazer
qualquer operação, pornto o player já está andando falta agora o inimigo!! Então... Let’s
go >>>>

Eu não vou fazer um inimigo com inteligência artificial porque acho que para vocês
iniciantes com Game Maker ficaria muito difícil então eu vou usar uma técnica super
fácil, vamos lá!

Primeiro crie um novo sprite edite-o e preencha-o com a cor que você quiser o
importante é que o tamanho seja 32x32 agora crie dois objetos com o mesmo sprite um
se chamará obj_rebate_inim_dir e o outro obj_rebate_inim_esq pronto, desmarque a
opção visible dos dois, va no inimigo e crie um evento creat e execulte um código:

Código:
image_speed=0.5

e vá na aba move e arraste a opção move fixed para dentro das ações, como na imagem
abaixo:

Expandir esta imagemReduzir esta imagem Ver em tamanho real


Agora na janela que abriu configure assim:

Expandir esta imagemReduzir esta imagem Ver em tamanho real

Depois aperte ok

Agora crie uma colisão do player com o obj_rebate_inim_dir depois va na aba move e
selecione a mesma opção anterior: move Fixed mais agora configure diferente, como
você ta colidindo com o obj_inim_rebate_dir é obvio que você va para esquerda,
então... marque somente a seta que aponta para a esquerda e em Speed coloque 1 que
será a velocidade que o nosso inimigo vai andar, não marque relativo e dê ok. Agora va
na aba main1 e procure a opção change Sprite e arraste para a janela de ações, na janela
que abriu escolha na opção:
Sprite: esprite do inimigo indo para esquerda
Submagem: coloque 0
Speed: coloque 0.5
E de ok.

crie uma colisão com o obj_rebate_inim_esq coloque na aba move e depois move fixed
mais agora mude a posição da setinha além deque você esta colidindo com o
obj_rebate_inim_esq a velocidade é a mesma, na aba main1 scolha a opção Chang
Sprite e configure assim:
Sprite: Esprite do inimigo indo para a esquerda
Submagem: coloque 0
Speed: coloque 0.5
De ok.
Pronto nosso inimigo já está andando vamos colocar na room para vermos se deu certo.
Veja a imagem abaixo:

Expandir esta imagemReduzir esta imagem Ver em tamanho real


Ele já anda mais queremos que quando o player bata em cima dele, ele morra e quando
colidir por baixo, o player morra, vamos lá, é bem simples é só você prestar atenção nos
códigos e nas suas explicações.

Vá no player e crie uma colisão com o inimigo na colisão coloque o seguinte código:

Código:
if (y < other.y) && (vspeed > 0) // Se a altura dele for maior
que do inimigo e quando colidir em 0 de velicidade
{
vspeed=-5 // Faça ele dar o pulinho pra cima
with(other){score+=10; instance_destroy()} //almenta
pontuação,tocar som,e destruir a outra instância (inimigo)
}
else // Senão
{
//tocar som
//pontuasão = 0
//vidas-=1
room_restart()
} // Recomeça o jogo

Pronto agora você já pula em cima dele e ele vai se destroir!


Vamos para uma parte super importante agora, as vaiáveis, é com elas que vamos faze
as outras ações, essa é uma parte longa então vamos ao trabalho

Coloque no evento other > Game Start do player:

Código:
global.pontos=0
global.vidas=3
global.ouro=0

Declaramos as variáveis pontos, vidas e ouro agora vamos usalas! Atenção: Usamos o
global. na frente quando uma variável será usada para outro obj e também colocamos
em Game Start porque elas vão acontecer toda vez que começa e não toda a vez que
inicia.

Primeiro mude o código que ta na colisão do player com o inimigo

Código:
if (y < other.y) && (vspeed > 0) // Se a altura dele for maior
que do inimigo e quando colidir em 0 de velicidade
{
vspeed=-5 // Faça ele dar o pulinho pra cima
with(other){pontos+=10; instance_destroy()} //aumenta pontuação
destruir a outra instância (obj_inimigo)
}
else // Senão
{
//você pode colocar um som aqui dele morrendo
global.pontos=0
global.vidas-=1
room_restart()
} // Recomeça o jogo

Pronto aqui ele já tem pontuação e vidas controladas.

Vamos passar para outros itens

Crie uma colisão do player com o obj_moeda e coloque:

Código:
global.pontos+=10

isso implica dizer que, quando o player colidir com o obj_moeda ele vai ganhar 10
pontos agora va no obj_moeda e faça uma colisão com o player nela coloque o código:
Código:
instance_destroy()

Agora quando ela colidir com o player ela vai se destoir mais a pontuação vai acontecer
primeiro porque o player que vai chegar nela.

Vamos para o obj_maça nele é bem simples, quero que ele tenha o mesmo
procedimento do obj_moeda só que vou terque fazer o código tudo de novo? Não !!!!
apenas coloque a maçã como parente da moedas, mais como eu faço isso ? Haa é
simples apenas do lado esquerdo de qualquer objeto ali onde coloca o nome mais para
baixo um pouquinho e tem várias opções incluindo “parent” ai é só você escolher o
obj_moedas para ser seu parente.

Vamos para o obj_vida, toda vez que eu colidir com ele, eu quero que eu ganhei 1 vida,
é muito fácil!! Coloque na colisão do player com o obj_vidas assim:

Código:
global.vidas+=1

E na colisão do obj_vidas com o player:

Código:
instance_destroy()

Vamos agora para o obj_barra_de_ouro, nele eu quero que adicione 1 barra de ouro
aquela variável que usamos lá também é muito fácil é apenas colocar na colisão do
player com o obj_barra_de_ouro:

Código:
global.ouro+=1

E na colisão do obj_barra_de_ouro com o player:

Código:
instance_destroy()

Vamos para o obj_sair é muito simples, queremos que quando o player colidir com
obj_sair ele saia d jogo então coloque na colisão do obj_sair com o player:

Código:
game_end()

Vamos para uma parte um pouco trabalhosa agora! a parte das chaves e do baú.

No obj_bau_fechado crie um evento creat e coloque assim:


Código:
tranca = 0 // declaramos a variável tranca

No step do mesmo coloque:

Código:
if tranca == 1 { // Se o player pegar 1 chave
effect_create_above(5,x,y,5,c_white) // Crie um efeito
instance_change(obj_bau_aberto,0) // criar uma instancia que é o
obj_bau_aberto
}

Crie um evento de colisão do obj_chave com o player e coloque:

Código:
effect_create_above(1,x,y,3,c_white) // Crie um efeito
obj_porta.tranca += 1 // Adicione uma Chave
instance_destroy() // E destrua

Agora no obj_bau_aberto crie um evento de colisão com o player e coloque:

Código:
global.ouro+=2//adiciona mais 2 ouros
global.vidas+=3//3 vidas
global.pontos+=1000// e mil pontos
instance_destroy()

Pronto!! Uffaa!! terminamos todos os objetos mais falta ainda uns mínimos detalhes,
vamos começar pelo mais grave

Queremos que o apareça na minha tela informando quanto eu tenho de vida, ouro,
pontos então é para já! Vamos fazer aparecer agorinha

Vá ao player e adicione o evento draw, lá execulte o seguinte código:

Código:
draw_set_color(c_white)//pinte da cor branca
draw_text(view_xview[0]+20,view_yview[0]+2,"Pontos:"+string(glob
al.pontos))
draw_text(view_xview[0]+100,view_yview[0]+2,"Vidas:"+string(glob
al.vidas))
draw_text(view_xview[0]+170,view_yview[0]+2,"Ouro:"+string(globa
l.ouro))

vou explicar melhor


a expressão “draw_set_color” quer dizer que é para pintar o texto.

A expressão “draw_text” quer dizer que é para desenhar um texto.


A expressão “view_xview[0]+20” quer dizer que ele desenhará o texto na posição x
(que é a horizontal) 20, você poderia colocar só o numero 20, mais ele será fixo, ou seja,
se fizermos uma ROom mais estendida ele não irá acompanhar a room, por isso
colocamos view_xview.

A expressão “view_yview+2” é simplismente a mesma coisa só que na posição y da tela


(que é a vertical)

A expressão “ “Pontos:” ” é o texto que será desenhado na tela, ele não significa
nenhuma variável por isso que está entre aspas.

A expressão “+string” quer dizer andar em fila, ou seja, vai andar um pouco na mesma
fila.

A expressão (global.pontos) é a variável que usamos, acontece a mesma coisa com os


outros códigos.

Vá ao step do player, vamos configurar as vidas, para que quando chegar em 0 ele
morra! Coloque:

Código:
if global.vidas <= 0 then {//se vidas menor ou igual a 0
game_end()//acabar jogo
}

Pronto, vamos mexer agora com a room, vamos definir o tamanho dela e como vai ser
visto quando for iniciada, let’s GO >>>

Vamos definir o tamanho dela, abra a room e vá em settings e configure como a


imagem abaixo:

Expandir esta imagemReduzir esta imagem Ver em tamanho real


Name é o nome da room.

Width que dizer é o tamanho horizontal da room, eu defini como 1000 e Height é o
tamanho vertical.

Speed é a velocidade dela.

Eu fiz de um tamanho mais você pode fazer do tamanho que você quiser vamos definir
as opções de views, va na aba views que fica no mesmo canto da aba settings e
configure como a imagem abaixo:

Expandir esta imagemReduzir esta imagem Ver em tamanho real


Dê ok lá em cima e vá em Global Game Setings que fica perto das pastas dos objetos,
srites, room e etc., ele é o penúltimo e configure-o assim:

Expandir esta imagemReduzir esta imagem Ver em tamanho real

Pronto agora personalize sua room, e pode testar!

Se você não conseguiu fazer com o tutorial, baixe a engne clicandoAqui

Esse foi mais um tutorial da equipe X-Games, feito especificamente por


Allison.
- Espero que tenha ajudado, tenho prazer em fazer isso!

Você também pode gostar