INTRODUÇÃO A JOGOS
Aula 01 - Movimentação Top Down
(Atualizado 08/02/2015)
Depois de estudar a teoria (Introdução à GML), vamos começar a fazer nosso primeiro jogo. Mas antes de começar realmente, você precisa entender sobre o posicionamentos dos elementos na tela do jogo.
Em um plano bidimensional (2D) temos dois eixos (X e Y).
X: é a posição horizontal de algum elemento.
Y: é a posição vertical de algum elemento. OBS: Na matemática que nós estudamos na escola quando um elemento esta para cima o y é positivo e quando esta para baixo é negativo. Na computação isso é invertido, em cima é negativo e embaixo é positivo.
Posição absoluta:
A posição absoluta no Game Maker quer dizer que as posições x e y estão em relação à room.
Exemplo: vamos criar um objeto na posição X = 10 e y = 10 na room:
Código: Selecionar todos
instance_create(10, 10, obj_player)
A posição relativa é a posição x e y em relação à outro valor.
Exemplo: Vamos criar um objeto balana posição y: -10 em relação ao player. Para isso o código usado é:
Código: Selecionar todos
instance_create(x, y - 10, obj_player)
Começando a movimentar:
Antes de tudo baixe esta engine:
[GM:S] DOWNLOAD DA ENGINE
[GM8] DOWNLOAD DA ENGINE
Guarde essa engine, usaremos ela nas próximas aulas.
Depois de baixar vamos começar a mover nosso player. Vamos ao step do player. Coloque o seguinte código:
Código: Selecionar todos
// Direita
if keyboard_check(vk_right)
{
sprite_index = spr_direita;
if place_free(x + 4, y)
{
x += 4;
}
}
Colisões simples
Tradução:
Código: Selecionar todos
// Direita
se tecla_estiver_sendo_pressionada(tecla_direita)
{
sprite_atual = spr_direita
se estiver_livre_de_colisão_com_sólidos(x + 4, y)
{
x += 4
}
}
- A variável local sprite_index, muda a sprite do objeto.
- A função place_free, verifica se tais posições x e y estão livres de colisões com objetos sólidos.
- A variável x guarda a posição horizontal do objeto em relação a room. e usamos a operação matemática de adição para move-lo para direita.
Se entendeu bem como funciona as posições x e y, não será problema fazer as outras movimentações. Então o código final do step será este:
Código: Selecionar todos
// Direita
if keyboard_check(vk_right)
{
sprite_index = spr_direita;
if place_free(x + 4, y)
{
x += 4;
}
}
// Esquerda
if keyboard_check(vk_left)
{
sprite_index = spr_esquerda;
if place_free(x - 4, y)
{
x -= 4;
}
}
// Cima
if keyboard_check(vk_down)
{
sprite_index = cima;
if place_free(x, y - 4)
{
y -= 4;
}
}
// Baixo
if keyboard_check(vk_down)
{
sprite_index = baixo;
if place_free(x, y + 4)
{
y += 4;
}
}
[GM:S] DOWNLOAD DA ENGINE
[GM8] DOWNLOAD DA ENGINE
Agora entenda algo muito importante, o valor adicionado nas posições x e y é 4, pois ele é múltiplo de 32, que é a grade da room e a largura e altura de seus objetos. Tente mudar todos esse 4 para 5, dificilmente você passará nos cantos estreitos do jogo. Mas porque? Por que as mudanças de posição são como tele transportes, e como ele esta checando sempre o que esta em colisão ele pode parar um pouco antes do previsto. Mude todos esses 4 para 32, que você entenderá melhor o que eu quiz dizer com tele transporte.
Mas aí tu me pergunta: Não poderei usar outros valores além desse múltiplos?
Pode sim. Só teríamos que mudar nosso código usando um loop repeat:
Código: Selecionar todos
// Direita
if keyboard_check(vk_right)
{
sprite_index = spr_direita;
repeat(7)
{
if place_free(x + 1, y)
{
x += 1;
}
}
}
Mais sobre o loop repeat na aula abaixo:
#IEM Aula 06 - For, do, until e repeat
Até mais!!!
Próxima aula: Tiro Top Down
FLWS!