Obrigado por visitar a The Game Makers Brasil 😁 Use o fórum de Dúvidas para fazer perguntas. Se está em busca de aprender dê uma olhada nos tutoriais.

Duvida com inimigos

Perguntas? A comunidade te ajuda a resolver.
Avatar do usuário
186557
Programador
Programador
Reações: 0
Mensagens: 28

Duvida com inimigos

Mensagem por 186557 » Sáb Dez 08, 2018 3:10 pm

Eu estou tentando fazer um inimigo mas estou com algumas duvidas

1- Como faço para que o inimigo tenha colisão em mais de um bloco? Na foto por exemplo ele
colide com só com um objeto e o outro ele atravessa

Imagem

o codigo step que estou usando para colisão do inimigo é esse:

hsp = dir * movespeed
vsp += grav;

//horizontal colison
if (place_meeting(x+hsp,y,Obj_Terra))
{
while(!place_meeting(x+sign(hsp),y,Obj_Terra))
{
x += sign(hsp);
}
hsp = 0;

dir *= -1;
}
x += hsp;

//Vertical colision
if (place_meeting(x,y+vsp,Obj_Terra))
{
while(!place_meeting(x,y+sign(vsp),Obj_Terra))
{
y += sign(vsp);
}
vsp = 0;
}
y += vsp;

E a segunda duvida que eu tenho é como fazer para que o inimigo
morra quando o player pula na cabeça dele? quando o player tenta pular na
cabeça do inimigo ele morre, como faço para corrigir isso?

codigo que estou usando para colisão com player:

if (place_meeting(x,y,Obj_Player))
{
if (Obj_Player.y < y-10)
{
with (Obj_Player) vsp = -jumpspeed;
instance_destroy();
}
else
{
game_restart();
}
}

Agradeço qualquer ajuda!

Avatar do usuário
None
Colaborador
Colaborador
Reações: 2
Mensagens: 286

Re: Duvida com inimigos

Mensagem por None » Sáb Dez 08, 2018 8:42 pm

O seu código de colisão com a terra está correto, você só precisa confirmar se o objeto que você quer que ele colida é o objeto bloco.

O seu código de colisão com o player tem um erro bem bobo.

Você está checando se ele colidiu com o player e dentro desta colisão você está checando se o player está longe dele, o que não faz sentido algum.

Você simplesmente tem que checar se o player está 1 pixel acima dele, e daí você faz todo o código de morrer e "pular" o player novamente.
Faça dois códigos separados se você achar melhor.
Um checando se o player está pulando na cabeça dele e outro checando se o player colidiu com ele.

Lembrando o código de colisão com a cabeça é y-1 o código de colisão é y apenas.
Tutorial de jogo de plataforma completo: https://youtu.be/MMUy_bMKqPk
Como criar um jogo de RPG Japonês no estilo Final Fantasy https://goo.gl/efr6fx

Avatar do usuário
186557
Programador
Programador
Reações: 0
Mensagens: 28

Re: Duvida com inimigos

Mensagem por 186557 » Seg Dez 10, 2018 1:12 am

Obrigado pela ajuda!
Mas ainda tenho uma pequena duvida; Por que os inimigos estão "congelados"? Eles se movem
normalmente mas o sprite esta parado. Tem algum erro no codigo que coloquei para as animações?

if movespeed=-3{sprite_index=spr_inimigo_espinho1;image_speed=0.4}
if movespeed= 3{sprite_index=spr_inimigo_espinho2;image_speed=0.4}

Mas fora isso esta tudo funcionando normalmente.

Avatar do usuário
RoyalGuardians
Programador
Programador
Reações: 0
Mensagens: 8

Re: Duvida com inimigos

Mensagem por RoyalGuardians » Seg Dez 10, 2018 5:21 am

Tem certeza que os valores de movespeed são sempre -3 e 3? tenta fazer com maior que zero e menor que zero, assim

Código: Selecionar todos

 if movespeed < 3{sprite_index=spr_inimigo_espinho1;image_speed=0.4}

Avatar do usuário
186557
Programador
Programador
Reações: 0
Mensagens: 28

Re: Duvida com inimigos

Mensagem por 186557 » Seg Dez 10, 2018 12:15 pm

Ainda não funcionou. Eu estava olhando o codigo e percebi algo, o movespeed só tem o valor 3 no Create;

dir = -1;
movespeed = 3;
grav = 1;
hsp = 0;
vsp = 0;

O fato do create não ter um valor negativo altera o codigo da animação? Preciso fazer alguma alteração?
Tentei adicionar movespeed = -3 mas ainda não funcionou

Avatar do usuário
RoyalGuardians
Programador
Programador
Reações: 0
Mensagens: 8

Re: Duvida com inimigos

Mensagem por RoyalGuardians » Seg Dez 10, 2018 6:02 pm

Olha pelo que to vendo, movespeed é so a variavel que vc utiliza pra definir a velocidade que ele so move, faz o seguinte...
Create

Código: Selecionar todos

 xPrevious = x;
 yPrevious = y;
Step

Código: Selecionar todos

xPrevious = x;
yPrevious = y;
EndStep

Código: Selecionar todos

if x > xPrevious{
sprite_index = sprite_direita;
image_speed = 0.4;
}else if x < xPrevious{
sprite_index = sprite_esquerda;
image_speed = 0.4;
} 
com isso vc consegue saber a direção que ele ta indo numa boa, tenta isso, caso não funcione, quando eu chegar em casa eu tento fazer algo melhor, pelo celular é tenso mecher kk

Avatar do usuário
None
Colaborador
Colaborador
Reações: 2
Mensagens: 286

Re: Duvida com inimigos

Mensagem por None » Seg Dez 10, 2018 6:41 pm

Tem algum momento em que você quer que a animação do inimigo pare?
Se a resposta for não, coloca no create event o image speed
Se a resposta for sim, quando?
Tutorial de jogo de plataforma completo: https://youtu.be/MMUy_bMKqPk
Como criar um jogo de RPG Japonês no estilo Final Fantasy https://goo.gl/efr6fx

Avatar do usuário
186557
Programador
Programador
Reações: 0
Mensagens: 28

Re: Duvida com inimigos

Mensagem por 186557 » Ter Dez 18, 2018 12:45 am

Era isso que eu estava precisando para tudo funcionar, obrigado!
E desculpem a demora para responder.

Responder

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 4 visitantes