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 sobre identificação e interação entre posição Y do player e do objeto. GML Tópico resolvido

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

Duvida sobre identificação e interação entre posição Y do player e do objeto. GML

Mensagem por dihishi » Seg Dez 12, 2022 10:11 am

Olá eu sou novato no uso de gamemaker e ando estudando bastante ele, porém vejo que sempre tenho as mesmas dificuldades nas coisas basicas como, identificar quando o jogador está abaixo ou acima de 1 objeto. Poderia facilmente usar o "Obj.y", mas não fica "clean" o suficiente... Por exemplo, eu estou trabalhando em um jogo que é basicamente um "ice climbers" feito por mim, não tenho intenção nenhuma de lucrar com ele, é mais um jogo para estudo, etc. A minha dificuldade está no momento em que o player quebra os blocos. No ice Climbers, quando você quebra 1 bloco, a velocidade em Y do jogador é zerada e então a gravidade o puxa para baixo. Além de que você não consegue quebrar mais de 1 bloco (tanto horizontalmente quanto verticalmente), porém eu tentei fazer essas coisas e não funciona. Por eu ser novato, eu não sei bem quais são as melhores opções para se usar na hora de fazer esse tipo de checagem e nem algumas "tecnicas" que eu poderia usar para melhorar o codigo ou melhorar a funcionalidade no geral. Por exemplo, eu fiz 1 Obj_Follower que serve para seguir o player para que 1 bloco so seja destruido se ele tiver em contato tanto com o Objfollower e o player e coloquei para ele se mover em snap, mas mesmo assim isso não da certo, ele ainda continua destruindo 2 blocos horizontalmente, além de que ele ultrapassa os blocos de baixo, também destruindo os de cima. Será que alguem poderia me ajudar?

vou deixar alguns codigos abaixo. O primeiro é o codigo para destruição dos blocos.

if place_meeting(x,y+1, Obj_Player) and place_meeting(x,y+1, Obj_Follower)
{

if (Obj_Player.state = PlayerState.JUMP)
{
//instance_create_layer(x -8, y -8, "Instances", Obj_BlocoQuebrado);
if (distance_to_object(Obj_Player) <= 0)
{
instance_destroy();
}
}
}


E esse debaixo é o script do pulo do player.

if place_meeting(x, y, Obj_ColBlock)
{
if (Obj_Follower.y <= Obj_ColBlock.y)
{
while(!place_meeting(x, y + sign(vspd), Obj_ColBlock))
{
y = y+ sign(vspd);
}
vspd = 0;
sprite_index = Iddle;
}
else
{
vspd = +15;
}
}

y = y + vspd/(aumentaSlow + 8) ;


Se tiver algo muito errado, etc, ficaria feliz que vocês pudessem me dizer!

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

Re: Duvida sobre identificação e interação entre posição Y do player e do objeto. GML  Tópico resolvido

Mensagem por Chuaschinai » Ter Dez 13, 2022 4:51 pm

Bom, ao invés de criar um objeto follower, você pode criar um objeto invisível em cima do martelo em snap quando for pressionada a tecla, para que quando ele esse objeto colida com o bloco ele destrua o bloco desejado e se auto destrua na sequencia, isso deve impedir que haja um objeto a mais na cena, e evitar a quebra de múltiplos blocos.

O problema no seu código pode ser na parte da colisão do objeto, você esta usando distance_to_object que procura pelo objeto mais próximo utilizando o bounding box(a area da sprite), como esta em snap ele estará provavelmente 0 pixel de distância o que fara que ele seja destruído também.

Não esqueça também, de usar = para atribuição e == para comparação, mesmo que o GameMaker arrume isso na hora de compilar, isso ajuda a entender o código.

Avatar do usuário
dihishi
Novato
Novato
Reações: 0
Mensagens: 3

Re: Duvida sobre identificação e interação entre posição Y do player e do objeto. GML

Mensagem por dihishi » Qua Dez 14, 2022 10:06 am

Po vlww pelas dicas! Eu n tinha pensado nessa maneira de fazer o Obj follower. Me ajudou mt! To com um problema no snap agora... Por que meus blocos, estão posicionados na grid, porém eles tão indo de 15, 25, 35, 45, etc, etc. E quando eu uso o move snap o Obj inv ou o proprio follower fica indo de 20, 30, 40, etc... Tem alguma sugestão para resolver?

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

Re: Duvida sobre identificação e interação entre posição Y do player e do objeto. GML

Mensagem por Chuaschinai » Qua Dez 14, 2022 2:17 pm

Bom o problema pode ser o move_snap, pois por traz do código ele utiliza o round para arredondar números quebrados, então pode ser que ele fique deslocado, você pode tentar usar o floor aqui esta o código:

Código: Selecionar todos

var cell_size = 32; // Tamanho da celula da grid exemplo
x = floor(x / cell_size) * cell_size;
y = floor(y / cell_size) * cell_size;
O move_snap é exatamente esse código, ele só diferencia de floor para round.

Avatar do usuário
dihishi
Novato
Novato
Reações: 0
Mensagens: 3

Re: Duvida sobre identificação e interação entre posição Y do player e do objeto. GML

Mensagem por dihishi » Qui Dez 15, 2022 11:36 am

Nossa cara! Vlwwww D++! Salvou muito!

Responder

Quem está online

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