Autor:João Neto
Eu não tenho visto muito "interesse" nas lições de GML. Eu sei, RMXP é mais fácil e tal. Eu não cheguei onde eu cheguei hoje programando no mais fácil. então se você quer crescer, é com as coisas difíceis que nosso aprendizado evolui, lembre-se disso.
Nesta lição, eu demostrarei alguns comandos simples, mas que se torna escencial na criação de jogos, principalmente de plataforma e RPG. Todo cenário precisa de 2 coisas básicas:
Limites e Obstáculos.
Mas como assim??Imagine um jogo de RPG. A maioria deles começa dentro de uma casa. Imagine os móveis desta casa, suas paredes, as pessoas dentro dela. Para você, são objetos, mas para a programação, são obstáculos os quais o personagem não pode transpor, por serem sólidos.
Você já jogou
Megaman?? Imagine porque o Megaman fica de pé sobre uma plataforma, mas cai quando pula sobre um buraco. Neste caso, o Limite para que o Megaman não caia é o chão ou as plataformas.
Hoje aprenderemos sobre alguns dos comandos mais básicos e mais úteis na criação de cenários e objetos do GML.
O comando
place_free(x,y) retorna um
booleando(true,false) quando verificado sobre o posicionamento de um objeto(no nosso caso o personagem) em relação a qualquer outro que estiver no cenário. Este comando é muito usado em
Ias (Inteligência artificial) para validar a posição dos objetos e se eles podem passar ou não na posição informada. Vamos usá-lo na prática. Abra o projeto da lição anterior. Iremos complementá-lo, pois ele já possui o básico que precisamos.
STEP 1 – CRIANDO O OBSTÁCULO.Desta vez criaremos um sprite usando uma imagem externa. Crie um novo sprite e clique em Load Sprite, você será direcionado para a pasta de resources do GM. Dentro da pasta Maze selecione a imagem
Wall.gif. Centralize a origem, selecione a opção
Full Image e nomeie-o como
Muro.
Agora crie um objeto, Nomeie-o como
Parede, selecione nele o Sprite e o Mask o sprite
Muro.
Nosso obstáculo já está criado. Em primeira instancia, ele não precisará ter nenhum evento ou código.
STEP 2 – ALTERANDO O CÓDIGOVamos mudar agora o código de movimentação do nosso “personagem”. Abra o Script
Setas, remova seu conteúdo e coloque este:
if(keyboard_check(vk_left))
{if(place_free(Caixa.x-5,Caixa.y))
{Caixa.x -= 5;}}
if(keyboard_check(vk_right))
{if(place_free(Caixa.x+5,Caixa.y))
{Caixa.x += 5;}}
if(keyboard_check(vk_up))
{if(place_free(Caixa.x,Caixa.y-5))
{Caixa.y -= 5;}}
if(keyboard_check(vk_down))
{if(place_free(Caixa.x,Caixa.y+5))
{Caixa.y += 5;}}
O que fizemos aqui??Observe que, em cada verificação de tecla, adicionamos uma verificação usando o comando
place_free, observe também que os parâmetros passados são exatamente os que farão com que o objeto se mova. Para verificarmos se deu certo, abra a Room, selecione o objeto parede e monte um cenário como este:
Salve e rode. Agora movimente o “personagem”. Observe que ele não passa pelos blocos, o que mostra que nosso script funcionou perfeitamente. Isto nos mostra que, usando o comando
place_free, podemos validar o posicionamento de qualquer objeto no jogo. Existem outras funções que validam o posicionamento, como o
place_empty(x,y), que verifica se a posição passada como parametro está vazia(o place_free valida a mesma coisa, mas também valida colisão) e o
place_meeting(x,y,obj) que valida se o objeto passado como parâmetro está na posição passada.
Na próxima lição eu falarei sobre colisão e velocidade de movimento, aguardem.