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.

Range em uma função

Perguntas? A comunidade te ajuda a resolver.
Avatar do usuário
Astral
Novato
Novato
Reações: 0
Mensagens: 1

Range em uma função

Mensagem por Astral » Qua Ago 28, 2024 3:54 pm

queria saber como poderia fazer para que uma torre atacasse quando um inimigo entrasse no range dela sem ter que fazer
if place_meeting(x+1,y,O_enemy);if place_meeting(x+2,y,O_enemy);if place_meeting(x+3,y,O_enemy);if place_meeting(x+4,y,O_enemy); etc...
como eu resolveria esse problema do range?

Avatar do usuário
KanekiZLF
Membro
Membro
Reações: 4
Mensagens: 38
Localização: Para

Re: Range em uma função

Mensagem por KanekiZLF » Qui Set 12, 2024 12:26 am

Boa noite, tudo bem ? Espero que sim !!

Para criar isso oque você quer vamos usar a função chamada collision_circle();
primeiro vamos entende-la !! collision_circle(X DO NOSSO OBEJTO, Y DO NOSSO OBJETO, DIAMETRO DO CIRCULO(TAMANHO), QUAL OBJETO VAMOS VERIFICAR SE O CIRCULO COLIDIU, false, false)(Esses dois ultimos são irrelevantes para oque queremos então vamos deixar em false !).

Seguindo adiante, no objeto que vai verificar as colisões em RANGE você vai fazer duas coisas, primeira você vai criar um evento desenhar (Event Draw), coloque isso:

Código: Selecionar todos

draw_self(); // Desenha a si mesmo
draw_circle(x + sprite_width/2, y + sprite_height/2, 80, true); // Desenha nosso cirulo (RANGE);
A segunda função funciona idêntica a função do collision_circle, porem ele desenha um circulo com um raio de 80cm o TRUE é para se o círculo é desenhado preenchido (falso) ou como um desenho de um pixel de largura (verdadeiro), lembre-se que esse valor deve ser o mesmo que vai na função do collision_circle.

Agora você precisa encontrar o centro do seu X e Y, e como fazer isso ? o seu X e Y são baseados na sua sprite, então dentro dela sabemos onde começa o nosso X e Y:


Em meu exemplo o X e Y estão no centro da Sprite, então não preciso alterar nada, nosso circulo ficara no centro sem problema nenhum! Agora vamos supor que não esteja assim, como resolver ? Iremos fazer isso

Código: Selecionar todos

draw_circle(x + sprite_width/2, y + sprite_height/2, 80, true); 
Com isso nos pegamos o tamanho da nossa sprite dividimos em 2 para obter o centro !!, agora que terminamos isso vamos para a parte lega !!

No seu objeto que vai detectar os inimigos coloque no evento etapa (Event Step):

Código: Selecionar todos

if collision_circle(x + sprite_width/2, y + sprite_height/2, 80, objColisWall, false, false) {
	show_debug_message("Colidiu na parede");
} else {
	show_debug_message("TA SUAVVE");
}
Aqui estou verificando se nosso circulo colidiu com a parede, feito isso você pode comenta a linha do desenhar, mantendo apenas o draw_self();

Ja esta funcionando !! Ficou alguma duvida ?? Aqui esta modelo que fiz para este EXEMPLO !!
Ninguém vai bater tão forte como a vida, mas a questão não é o quão forte você consegue bater. É o quão forte você consegue apanhar e continuar seguindo em frente.

Responder

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante