Colisão com inimigo para uma ação
Enviado: Dom Mar 05, 2023 2:08 pm
Eu estava querendo que o Jogador colidisse com os inimigos também. Consegui fazer mas, o Jogador fica travado quando faz algumas ações. Aqui um vídeo.
Código de colisão no objeto pai
END STEP
Aqui as ações do Jogador
STEP
Código de colisão no objeto pai
END STEP
Código: Selecionar todos
if (abs(velh) <= max_velh)
{
velh += mid_velh;
}
var _velh = sign(velh);
var _velv = sign(velv);
repeat(abs(velh))
{
if (place_meeting(x + sign(velh), y, Bloco) &&
!place_meeting(x + sign(velh), y - 1, Bloco)) y--;
if (!place_meeting(x + sign(velh), y, Bloco) &&
!place_meeting(x + sign(velh), y + 1, Bloco) &&
place_meeting(x + sign(velh), y + 2, Bloco)) y++;
if (place_meeting(x + _velh, y, Bloco))
{
velh = 0;
break;
}
if (place_meeting(x + _velh, y, Pai_inimigo))
{
velh = 0;
break;
}
x += _velh;
}
repeat(abs(velv))
{
if (place_meeting(x, y + _velv, Bloco))
{
velv = 0;
break;
}
if (place_meeting(x, y + _velv, Pai_inimigo))
{
velv = 0;
break;
}
y += _velv;
}
STEP
Código: Selecionar todos
case "homming attack":
{
posso = true
velh = 0;
velv = 0;
sprite_index = spindash_partida;
// direçao em que o player precisa ir
var dir = point_direction(Jogador.x, Jogador.y, inimigoMaisProximo.x, inimigoMaisProximo.y); //usando a referencia do inimigo mais proximo e do this (propria instancia executando)
velh = lengthdir_x(velocidade , dir);
velv = lengthdir_y(velocidade , dir);
//direction = point_direction(x, y, inimigo_id.x, inimigo_id.y);
if(sprite_index == spindash_partida && dano == noone && posso)
{
dano = instance_create_layer(x + sprite_width/6, y - sprite_height/65, layer, Dano293054);
dano.dano = dash_atace;
dano.pai = id;
dano.morrer = false;
posso = false;
}
if(place_meeting(x, y, Pai_inimigo))
{
velh = 0;
velv = 0;
estado = "homming attack sai";
image_index = 0;
}
/*if(ataque)
{
estado = "ataque homing";
image_index = 0;
}*/
if(image_index >= image_number-1)
{
homming_podi = false;
}
break;
}
case "homming attack sai":
{
velh = 0;
velv = 0;
sprite_index = Boost_Pulo4299;
if(image_xscale =1)
{
velh2 = -3;
}
if(image_xscale =-1)
{
velh2 = 3;
}
if(ataque)
{
estado = "ataque homing";
velh2 = 0;
velv = 0;
combo = 0;
image_index = 0;
}
if(image_index >= image_number-1)
{
estado = "pulo";
homming_podi = false;
}
break;
}
Código: Selecionar todos
case "voadora vai":
{
atacando = true;
velh = 0 ;
velv = 0;
//velv = 20;
var dir = point_direction(Jogador.x, Jogador.y, inimigoMaisProximo.x, inimigoMaisProximo.y); //usando a referencia do inimigo mais proximo e do this (propria instancia executando)
velh = lengthdir_x(velocidade , dir);
velv = lengthdir_y(velocidade , dir);
sprite_index = Sprite275
if(sprite_index == Sprite275 && dano == noone && posso)
{
dano = instance_create_layer(x + sprite_width /8 + velh * 2, y - sprite_height / 55, layer, Dano2951)
dano.pai = id;
dano.morrer = false;
posso = false;
}
if(chao)
{
estado = "voadora para";
}
if (place_meeting(x, y, Pai_inimigo))
{
estado = "voadora para2";
}
break;
}
case "voadora para":
{
atacando = true;
velh= 0 ;
velv = 0;
sprite_index = Chute_ar_baixo_terminado1;
if(image_xscale =1)
{
velh2 = 0;
}
if(image_xscale =-1)
{
velh2 = -0;
}
if(image_index >= image_number-1)
{
estado = "parado";
if(dano)
{
instance_destroy(dano, false);
dano = noone;
}
}
break;
}
Código: Selecionar todos
case"pisada":
{
posso = true;
combo = 0;
sprite_index = Sprite329
if(sprite_index == Sprite329 && dano == noone && posso)
{
dano = instance_create_layer(x + sprite_width/6, y + sprite_height/65, layer, Dano293054);
dano.dano = dash_atace;
dano.pai = id;
dano.morrer = false;
posso = false;
}
velh = 0;
velv = 30;
if(chao)
{
estado = "voadora para";
image_index = 0;
}
if(place_meeting(x, y, EggPawn_Samurai))
{
estado = "voadora para2";
}
break;
}