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.

Como mudar a direção de um objeto ao bater em outro objeto parado? Tópico resolvido

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

Como mudar a direção de um objeto ao bater em outro objeto parado?

Mensagem por Tord_Pequeno » Sex Fev 03, 2023 1:12 am

Olá, sou novo em gamemaker e principalmente em programação e gostaria de tirar uma dúvida que eu não consigo encontrar em lugar nenhum a resposta. Como eu faço para um objeto em movimento bater em um objeto parado e ao invés de atravessar o objeto parado o objeto em movimento ricocheteia/rebate e muda seu caminho? por favor imploro por ajuda.
Eu sou muito novo (em programação especificamente)

Avatar do usuário
All-x
Administrador
Administrador
Reações: 8
Mensagens: 621
Localização: Dourados-MS

Contato:

Re: Como mudar a direção de um objeto ao bater em outro objeto parado?

Mensagem por All-x » Sex Fev 03, 2023 10:07 am

Depende muito do que você está usando pra fazer o movimento.

Tu pode marcar esse objeto parado como solid. E acrescentar isso na colisão do objeto em movimento com ele:

Código: Selecionar todos

move_bounce_solid(true);
Agora, se for apenas uma simples inversão de velocidade:

Código: Selecionar todos

speed = -speed;
Começando com o Game Maker? Olhou para assinatura certa!

Imagem

Tutoriais e vídeo aulas de programação! Clique no Banner e confira!

Avatar do usuário
Tord_Pequeno
Novato
Novato
Reações: 1
Mensagens: 4

Re: Como mudar a direção de um objeto ao bater em outro objeto parado?

Mensagem por Tord_Pequeno » Sex Fev 03, 2023 11:05 am

All-x escreveu: Sex Fev 03, 2023 10:07 am Depende muito do que você está usando pra fazer o movimento.

Tu pode marcar esse objeto parado como solid. E acrescentar isso na colisão do objeto em movimento com ele:

Código: Selecionar todos

move_bounce_solid(true);
Agora, se for apenas uma simples inversão de velocidade:

Código: Selecionar todos

speed = -speed;
Eu tentei com os dois códigos que você deu mas o resultado deles foi sempre tocar no objeto e ficar grudado nele, o código que eu estou usando para fazer a movimentação do objeto é:

Creat

Código: Selecionar todos

hsp=random_range(-2,2)
vsp=random_range(-2,2)
Step

Código: Selecionar todos

x+=hsp
y+=vsp

if x<0 {hsp=-hsp}
if x>room_width {hsp=-hsp}

if y<0 {vsp=-vsp}
if y>room_height {vsp=-vsp}
Eu sou muito novo (em programação especificamente)

Avatar do usuário
All-x
Administrador
Administrador
Reações: 8
Mensagens: 621
Localização: Dourados-MS

Contato:

Re: Como mudar a direção de um objeto ao bater em outro objeto parado?  Tópico resolvido

Mensagem por All-x » Sex Fev 03, 2023 6:24 pm

Você está utilizando um sistema próprio de movimento, aplicando as velocidades diretamente em x e y. Logo, os códigos que te passei não servem. Só serviriam se estivesse utilizando o sistema de movimento interno do GM (speed, hspeed, vspeed, direction, gravity e etc).

Enfim, fiz aqui um código que faz a reversão, assim como tu está fazendo pra ele rebater ao sair da room.

Coloca antes desse código que colocou no step.

Código: Selecionar todos

// Calcula direção atual
direcao = point_direction(x, y, x + hsp, y + vsp);

// Caso colida com o objeto 'obj_obstaculo' reverte a direção
if place_meeting(x + hsp, y + vsp, obj_obstaculo) {
	nova_direcao = direcao + 180;
	velocidade = point_distance(0, 0, hsp, vsp);
	
	hsp = lengthdir_x(velocidade, nova_direcao);
	vsp = lengthdir_y(velocidade, nova_direcao);
}
Não testei, mas deve funcionar.
Começando com o Game Maker? Olhou para assinatura certa!

Imagem

Tutoriais e vídeo aulas de programação! Clique no Banner e confira!

Avatar do usuário
Tord_Pequeno
Novato
Novato
Reações: 1
Mensagens: 4

Re: Como mudar a direção de um objeto ao bater em outro objeto parado?

Mensagem por Tord_Pequeno » Sex Fev 03, 2023 10:38 pm

All-x escreveu: Sex Fev 03, 2023 6:24 pm Você está utilizando um sistema próprio de movimento, aplicando as velocidades diretamente em x e y. Logo, os códigos que te passei não servem. Só serviriam se estivesse utilizando o sistema de movimento interno do GM (speed, hspeed, vspeed, direction, gravity e etc).

Enfim, fiz aqui um código que faz a reversão, assim como tu está fazendo pra ele rebater ao sair da room.

Coloca antes desse código que colocou no step.

Código: Selecionar todos

// Calcula direção atual
direcao = point_direction(x, y, x + hsp, y + vsp);

// Caso colida com o objeto 'obj_obstaculo' reverte a direção
if place_meeting(x + hsp, y + vsp, obj_obstaculo) {
	nova_direcao = direcao + 180;
	velocidade = point_distance(0, 0, hsp, vsp);
	
	hsp = lengthdir_x(velocidade, nova_direcao);
	vsp = lengthdir_y(velocidade, nova_direcao);
}
Não testei, mas deve funcionar.
Eu tentei usar o código mas ele dava o seguinte erro:

Código: Selecionar todos

___________________________________________
############################################################################################
ERROR in
action number 1
of  Step Event0
for object oDenominalmov:

Variable <unknown_object>.oDenominalmov(100007, -2147483648) not set before reading it.
 at gml_Object_oDenominalmov_Step_0 (line 7) - if oDenominalmov(x + hsp, y + vsp, oBlocomal) {
############################################################################################
gml_Object_oDenominalmov_Step_0 (line 7)
Por motivos de praticidade eu vou tentar usar os códigos do game maker para fazer a mesma coisa que o meu faz e tentar usar os seus anteriores e se ou quando eu conseguir eu irei dizer aqui, mas caso você ainda tenha como me ajudar eu agradeceria muito mesmo se você me guiasse, mas enquanto isso vou tentar do outro jeito.
Eu sou muito novo (em programação especificamente)

Avatar do usuário
All-x
Administrador
Administrador
Reações: 8
Mensagens: 621
Localização: Dourados-MS

Contato:

Re: Como mudar a direção de um objeto ao bater em outro objeto parado?

Mensagem por All-x » Sáb Fev 04, 2023 10:44 am

Imagem

Não sei o que tentou fazer aqui. Mas oDenominalmov é seu objeto, não um método/função (Que usam parâmetros). Coloque place_meeting como no código que te passei.
(...) as caso você ainda tenha como me ajudar eu agradeceria muito mesmo se você me guiasse, mas enquanto isso vou tentar do outro jeito.
Respondo dúvidas aqui quando me sobra um tempo. Enfim, sugiro que comece estudar a fundo sobre GML.
Começando com o Game Maker? Olhou para assinatura certa!

Imagem

Tutoriais e vídeo aulas de programação! Clique no Banner e confira!

Avatar do usuário
Tord_Pequeno
Novato
Novato
Reações: 1
Mensagens: 4

Re: Como mudar a direção de um objeto ao bater em outro objeto parado?

Mensagem por Tord_Pequeno » Sáb Fev 04, 2023 2:47 pm

Ah sim, eu mudei isso no código e deu certo kkkkk, foi erro meu, mas muito obrigado por ter me ajudado com isso.
1 Imagem
Eu sou muito novo (em programação especificamente)

Responder

Quem está online

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