Fazer bola rebater no canto da tela

6 respostas
karthon

Fala pessoal beleza?

Tenho um trabalho em java para fazer, eu tenho que fazer com que uma bolinha rebata em todos os lados da tela, estou usando o Netbeans para simular a animação, só que não sei como faço para fazer a bolinha rebater no lado direito e baixo da tela, no lado esquerdo e em cima eu consegui, basta dizer que quando eixo X e Y forem menor que 0 ele inverte o sinal…assim funcionou, porém essa lógica não funciona para os eixos máximos(X = 1440px e Y = 800px) no meu caso…alguém tem alguma ideia de como posso fazer isso?
segue o código:

http://www.codeshare.io/CXKvs

6 Respostas

ViniGodoy

Esse tutorial explica:
http://pontov.com.br/site/index.php/java/48-java2d/123-a-primeira-animacao

Mas seria bom você ler a série completa:
http://pontov.com.br/site/index.php/java/48-java2d

rmendes08

Seu erro é esse:

px = (-1)*(-px);

Ao multiplicar -px por -1 você inverte o sinal duas vezes, que é a mesma coisa que não inverter o sinal. De maneira simples, o sentido do movimento deve ser invertido sempre que a bola atinge um dos cantos da tela:

if (px < 0 || px > 800 =){    //faz com que a bolinha rebata 
    px = -px;
}
karthon

Obrigado pelas respostas, eu já tentei isso e a bolinha some quando chega no valor máximo…

if ((px < 0) || (px > 800)){    //faz com que a bolinha rebata

px = -px;

}
if ((py < 0) || (py > 500)){    //faz com que a bolinha rebata quando eixo Y for menor que 0

py = -py;

}

ViniGodoy: não tem uma forma mais simples de fazer isso, mais ou menos como eu to tentando fazer?

ViniGodoy

Você chegou a ler o artigo? Ver a figura?
Só está faltando somar o tamanho das bolinhas no limite superior.

karthon

Li sim ViniGodoy, consegui faze-lo funcionar :D
Segue o o código que usei para fazer as colisões...

if (px < 0){    //faz com que a bolinha rebata quando eixo X for menor que 0
            px = -px;
        } else if ((px+tamBola) > tamTelaX){     //faz com que a bolinha rebata quando eixo X for maior que tamTelaX
            px = (tamTelaX - px) + tamTelaX - 50;
        }  

        if (py < 0){    //faz com que a bolinha rebata quando eixo Y for menor que 0
            py = -py;
        } else if ((py + tamBola) > tamTelaY){     //faz com que a bolinha rebata quando eixo Y for maior que tamTelay
            py = (tamTelaY - py) + tamTelaY - 70;
        }

Só que estou com um próximo problema, fazer disso um loop, para sempre ficar rebatendo... pois esta rebatendo apenas uma vez, tentei usar um while mas da erro e nem executa... com while ficou assim

int loop = 1;

while (loop = 1){
         if (px < 0){    //faz com que a bolinha rebata quando eixo X for menor que 0
            px = -px;
        } else if ((px+tamBola) > tamTelaX){     //faz com que a bolinha rebata quando eixo X for maior que tamTelaX
            px = (tamTelaX - px) + tamTelaX - 50;
        }  

        if (py < 0){    //faz com que a bolinha rebata quando eixo Y for menor que 0
            py = -py;
        } else if ((py + tamBola) > tamTelaY){     //faz com que a bolinha rebata quando eixo Y for maior que tamTelay
            py = (tamTelaY - py) + tamTelaY - 70;
        }
}

só que a tela fica preta e trava a animação....alguém sabe como posso implementar nesse código.

karthon

DÚVIDA RESOLVIDA!

Fiz um FOR e consegui fazer o loop!

Criado 2 de setembro de 2014
Ultima resposta 4 de set. de 2014
Respostas 6
Participantes 3