Página 1 de 1

Como parar objeto em determinado lugar da tela (x,y)?

Enviado: Sáb Ago 25, 2018 7:57 pm
por Curioso
Olá, pessoal. Como faço para interromper movimento de um objeto quando ele chegar em determinado lugar da tela? (GameMaker Studio).
Eu quero mover um objeto no eixo x após clicá-lo.
Assim: Se clicou no objeto, então: hspeed = -5.
if objeto.x = 525 {hspeed = 0}
Dessa forma, dá certo, mas se eu colocar mais velocidade, "hspeed=25" por exemplo, o objeto passa direto e não para.
Eu tentei por colisão com outro objeto, mas não é preciso quando aumento a velocidade e o resultado fica ruim.

Alguém tem uma ideia?

Re: Como parar objeto em determinado lugar da tela (x,y)?

Enviado: Sáb Ago 25, 2018 8:35 pm
por fuzenrad
Manda andar sempre de 1 em 1 pixel e lança num loop for 0 to 24, dai fica perfeito.

Re: Como parar objeto em determinado lugar da tela (x,y)?

Enviado: Sáb Ago 25, 2018 9:38 pm
por None
Basicamente o que foi dito acima, você apenas precisa adicionar a velocidade de movimento à equação, então você iria ver se a posição atual acrescida da velocidade chega lá, então você pode usar um laço de repetição para se aproximar 1 pixel por vez.

Se você clicar no link aqui de baixo eu explico como fazer este modelo de "colisão".

Re: Como parar objeto em determinado lugar da tela (x,y)?

Enviado: Sáb Ago 25, 2018 10:20 pm
por Curioso
Poxa, eu não entendi ou não sei como fazer... :( vou lhes mandar meu código resumido:

(...)
Se eu clicar no objeto:

if objeto.x = 860 && teste=false && toque = 1 //aqui é um teste que eu faço, mas acho que é irrelevante pra vcs...
{
   hspeed=-5 //o negócio é aqui. :( Eu quero que essa velocidade seja maior, mas dá errado.
   teste=true
   toque = 0
}
if objeto.x = 525 && teste = true && toque = 2
{
   hspeed = 5 //e aqui
   teste= false
   toque = 0
}
(...)
Aí quando o objeto está em 525 ou em 860, o hspeed=0. Como falei, dá certo com velocidade menores.

Re: Como parar objeto em determinado lugar da tela (x,y)?

Enviado: Dom Ago 26, 2018 1:45 am
por None
Você está querendo que ele vá da esquerda para direita e vice versa?

É só colocar então o (x + hspeed >= 860) hspeed = -5 resto do código.

If (x + hspeed <= 525) hspeed = 5 resto do código.
Este não é o melhor jeito de fazer e com velocidades maiores vai ficar nítido o problema.

Olhe o vídeo que eu te indiquei para entender melhor como fazer o laço de repetição.

Re: Como parar objeto em determinado lugar da tela (x,y)?

Enviado: Dom Ago 26, 2018 6:16 am
por fuzenrad
Cara, se com 5 de velocidade funciona, então faz um loop de 5 iterações apenas (0 to 4), que visualmente vai andar a 25, só troca o hspeed=5 por x+=5, tudo dentro do loop...


var i;
for (i = 0; i < 4; i += 1)
{
//COLE O SEU CODIGO AQUI DENTRO trocando hspeed por x+
}

Re: Como parar objeto em determinado lugar da tela (x,y)?

Enviado: Dom Ago 26, 2018 8:28 pm
por Curioso
Consegui :)
Eu tava desenvolvendo o método do None quando me veio à cabeça que eu poderia "corrigir" o posicionamento do objeto no momento da colisão. Vou continuar fazendo testes, pois pode não ser o melhor jeito de fazer esse tipo de coisa, mas por enquanto, o resultado ficou bom. Servirá como se fosse um menu lateral...

Eu lhes agradeço!!

None, seus vídeos são muito bons!

Até a próxima! hehe