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.

Colisão com inimigo para uma ação Tópico resolvido

Perguntas? A comunidade te ajuda a resolver.
Avatar do usuário
Luxazx
Membro
Membro
Reações: 0
Mensagens: 20

Colisão com inimigo para uma ação

Mensagem por Luxazx » 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

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;
}
Aqui as ações do Jogador
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;
	}

Avatar do usuário
Chuaschinai
Colaborador
Colaborador
Reações: 6
Mensagens: 198

Re: Colisão com inimigo para uma ação  Tópico resolvido

Mensagem por Chuaschinai » Seg Mar 06, 2023 9:15 pm

Bom, é meio difícil analisar assim, tem algumas variáveis desconhecidas.

- O estado "ataque homing" manda para onde?
- E onde é ativado o estado "homming attack"?

Seria interessante você debugar o código para saber a onde ele esta parando, usando o debuguer do GameMaker mesmo, ou ate mesmo um show_debug_message nessas partes de código onde se checa a colisão, para tentar encontrar o possível código que esta dando problema.

Avatar do usuário
Luxazx
Membro
Membro
Reações: 0
Mensagens: 20

Re: Colisão com inimigo para uma ação

Mensagem por Luxazx » Qua Mar 15, 2023 7:15 pm

Consegui resolver valeu pela dica!

Responder

Quem está online

Usuários navegando neste fórum: Ahrefs [Bot] e 5 visitantes