quinta-feira, 11 de agosto de 2022

Como fazer COLISÃO (de paredes) para jogos RPG/campo aberto no Game Maker Studio 2

Foto: Pixabay

ATENÇÃO: esse tutorial só serve para jogos de RPG/campo aberto feito no GameMaker. Caso você queira fazer colisão em jogos de plataforma, clique aqui.

Aqui no blog já fizemos uma matéria explicando sobre como fazer movimentação dos Personagens no Game Maker, e também uma sobre como fazer a câmera seguir o jogador. Se você já leu essas matérias, agora vamos entrar no passo das Colisões, o que é muito simples de fazer.

Antes de tudo, RECOMENDAMOS que antes de ler esse tutorial, você já tenha pelo menos colocado a movimentação dos Personagens. Apesar de fazer isso de diversas formas, vamos seguir fazendo usando o MESMO CÓDIGO que você deve ter usado se usou nosso tutorial de movimentação de Personagens.

Afinal de contas, o que é uma Colisão?!

No GameMaker (ou qualquer jogos), uma Colisão é um evento quando seu Personagem encosta em algum outro objeto dentro do mundo de jogo. No entanto, nossa explicação será para fazer PAREDES, onde impedirá que o Personagem possa passar.

Quando você cria uma Sprite (desenho a ser usado no jogo) no GameMaker, existe algo chamado Máscara de Colisão. Ali demarcará a área de colisão que seu Personagem (e também as paredes) no jogo, o que pode ser feito para aumentar ou diminuir a área de colisão, ao seu gosto.

Veja que, ao criar minha sprite, existe uma opção de Collision Mask (Máscara de Colisão)

É muito simples de lidar com a Collision Mask (Máscara de Colisão). TODO Sprite no GameMaker tem a sua PRÓPRIA Máscara de Colisão, o que você pode definir manualmente cada uma.

Se você usou nosso tutorial de movimentação para criar um RPG (movimentação pros quatro lados), ou mesmo para um jogo metroidvania/plataforma, saiba que esse código funcionará em ambos os casos, apesar de ser muito simples.

Caso já tenha criado a movimentação do seu Personagem: agora você deve:

1º - Criar uma Sprite para ser a parede do jogo. Pode ser muito bem um quadrado branco ou de qualquer outra cor a sua escolha. Essa sprite especial só será vista no momento da programação do jogo e, quando ele rodar, ela ficará totalmente invisível. No entanto, você também pode criar uma sprite de chão ou parede separadamente se desejar, se quiser adiantar o processo. Para isso, ao criar o objeto, decida se ele ficará visível ou não (o que falaremos a seguir).

2º - Ao criar a Sprite, crie agora um objeto que será a parede do jogo. No nosso exemplo, será chamado de obj_parede.

Um quadrado de uma cor. Essa será a sprite do nosso objeto parede (obj_parede)

Coloque a sprite que você colocou no obj_parede. Faça apenas isso.


Criou o obj_parede?! Ao criar, tenha em mente duas coisas:

1) Marque as opções Solid e Persistent. 

2) Caso você queira usar essas mesmas sprites para o chão (ao invés de usar texturas, o que ensinaremos futuramente por aqui) deixe a opção Visible marcada. Caso queira usar texturas futuramente, então deixe a opção Visible desmarcada, para deixar as paredes invisíveis.

Começando então a programar o sistema de Colisão (Paredes)

No objeto que você usa para o jogador (aqui no caso é o obj_jogador), você vai criar um NOVO EVENTO, chamado Colision e vai apontar o objeto que você usou para as paredes do jogo. No nosso caso, será o obj_paredes.



Ao fazer isso (Collision > obj_parede), você vai digitar o seguinte código:

//Colisão
if (keyboard_check(Nome do Botão que usou para mover o personagem para direita) && !place_meeting(x + 2, y, obj_parede)) 
{
x += 2;
}

if (keyboard_check(Nome do Botão que usou para mover o personagem para esquerda) && !place_meeting(x - 2, y, obj_parede)) 
{
x -= 2;
}

if (keyboard_check(Nome do Botão que usou para mover o personagem para cima) && !place_meeting(x, y - 2, obj_parede)) 
{
y -= 2;
}

if (keyboard_check(Nome do Botão que usou para mover o personagem para baixo) && !place_meeting(x, y + 2, obj_parede)) 
{
y += 2;
}

Como pode ver acima, deixei claro para que você coloque o nome do botão que usou para criar a movimentação do Personagem. Se seu Personagem andará para as quatro direções, mantenha o código completo acima. Se vai andar apenas para esquerda ou direita, coloque apenas os "ifs" que falam para direita e esquerda.

Conforme ensinamos no tutorial sobre movimentação, você deve colocar o nome do botão que usou para usar cada ação. Se for os direcionais do teclado, você normalmente usaria vk_nome, mas se usar outra tecla, como teclas numéricas e letras, usaria ord("LETRA MAIÚSCULA")).

No meu exemplo, eu usei as teclas normais do teclado (A, S, W, D), então meu código ficou dessa forma:

//Colisão
if (keyboard_check(ord("D")) && !place_meeting(x + 2, y, obj_parede)) {
x += 2;
}

if (keyboard_check(ord("A")) && !place_meeting(x - 2, y, obj_parede)) {
x -= 2;
}

if (keyboard_check(ord("W")) && !place_meeting(x, y - 2, obj_parede)) {
y -= 2;
}

if (keyboard_check(ord("S")) && !place_meeting(x, y + 2, obj_parede)) {
y += 2;
}
Veja como ficou no exemplo.



Ao fazer isso, você já consegue fazer as paredes do seu jogo. Basta colocar os objetos da parede na sua Room da forma que você quiser, e pronto. As colisões estão feitas!

DETALHE IMPORTANTE: se você tem objetos diferentes para paredes (como um objeto para parede e outra para o chão, com sprites diferentes) você precisa criar uma colisão para cada objeto de parede, seguindo o mesmo procedimento acima.

Qualquer dúvida, deixe nos comentários abaixo.

Nenhum comentário:

Postar um comentário

Sobre Nós

Rei dos Games


Rei dos Games é um site destinado a falar tudo sobre videogames (jogos antigos), RPGs de mesa e board games. Além disso, trazemos tutoriais, dicas, cheats de quem realmente experimentou essas mídias, trazendo também boas recomendações.


Rei dos Games é o único blog dedicado a três tipos de jogos diferentes (eletrônicos, de tabuleiro e RPGs). Se você quer conhecer bons jogos para brincar, este é o lugar certo.


Postamos recentemente

recentposts

Aleatório

randomposts