pessoal na classe que segue abaixo tem um metodo private void verSeBateuNaBarra() com uma equaçao mas eu nao entendi porque ela funciona!! alguem poderia me explicar como ela funciona? Porque ela foi implementada daquele jeito e porque velocidadeY = -velocidadeY e porque tb nao muda a velocidadeX???
ahh essa classe corresponde a uma das classes do jogo sobre arkanoid!!
[code]
import java.awt.Dimension;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import edugraf.jadix.fachada.PaginaDix;
import edugraf.jadix.fachada.Pichador;
public class Bola
{
Pichador pix = new Pichador();
PaginaDix página;
Dimension tamanhoDoAplique;
Integer velocidadeX = 8;
Integer velocidadeY = 10;
Barra barra;
List listaDeBricks;
public Bola(Barra barraDoJogo, PaginaDix páginaDix, List<Brick> bricksRecebidos)
{
pix.fixarÍcone("recursos/bola.gif").tornarVisível().semRastros();
Timer tempo = new Timer();
tempo.schedule(new andar(), 0, 50);
página = páginaDix;
barra = barraDoJogo;
listaDeBricks = bricksRecebidos;
velocidadeX = 8+(int)(Math.random()*2);
}
private class andar extends TimerTask
{
@Override
public void run() {
pix.andarPara(pix.obterPosição().x + velocidadeX, pix
.obterPosição().y
+ velocidadeY);
verSeBateuNasParedes();
verSeBateuNaBarra();
verSeBateuNosBlocos();
}
private void verSeBateuNosBlocos() {
for (Brick brick : listaDeBricks) {
if (pix.obterPosição().x < brick.obterX()
+ brick.obterLargura() / 2
&& pix.obterPosição().x > brick.obterX()
- brick.obterLargura() / 2
&& pix.obterPosição().y > brick.obterY()
- brick.obterLargura() / 2
&& pix.obterPosição().y < brick.obterY()
+ brick.obterLargura() / 2) {
velocidadeY = -velocidadeY;
brick.quebrar();
}
}
Brick.removerBricks();
}
private void verSeBateuNaBarra()
{
if (pix.obterPosição().x < barra.obterX() + barra.obterLargura() / 2
&& pix.obterPosição().x > barra.obterX()- barra.obterLargura() / 2
&& pix.obterPosição().y < -180 + barra.obterAltura() /2
&& pix.obterPosição().y > -180 - barra.obterAltura() /2)
{
velocidadeY = -velocidadeY;
}
}
}
private void verSeBateuNasParedes() {
if (pix.obterPosição().y > 280) {
velocidadeY = -velocidadeY;
}
if (pix.obterPosição().x > 280 || pix.obterPosição().x < -280) {
velocidadeX = -velocidadeX;
}
if (pix.obterPosição().y < -280) {
pix.andarPara(0, 0).fixarÍcone("recursos/game_over.gif")
.fixarProfundidade(1);
velocidadeX = 0;
velocidadeY = 0;
}
}
}[/code]
E se a classe fosse assim implementada (ainda sendo implementada)e o metodo que verifica se bateu nos tijolos fosse assim implementado???
public class GerenciadorDeColisoes extends TimerTask
{
Rectangle retanguloBola = new Rectangle();
Rectangle retanguloBarra = new Rectangle();
Rectangle retanguloParede = new Rectangle();
Rectangle retanguloTijolo = new Rectangle();
List<Tijolo> listaDeTijolos = Tijolo.listaDeTijolos;
public GerenciadorDeColisoes()
{
retanguloBola.height = 15;
retanguloBola.width= 15;
retanguloBarra.height = 15;
retanguloBarra.width= 25;
retanguloParede.height = 15;
retanguloParede.width= 25;
}
@Override
public void run()
{
verificaSeBateuNosTijolos();
verificaSeBateuNaBarra();
}
public void verificaSeBateuNosTijolos()
{
int i = 0;
for (Tijolo tijolo : listaDeTijolos)
{
if (retanguloBola.intersects(listaDeTijolos.get(i)))
{
tijolo.destrua(listaDeTijolos.get(i));
}
i++;
}
}
public void verificaSeBateuNaBarra()
{
if (retanguloBola.intersects(retanguloBarra))
{
// implementar!!
}
}
*
*
*
}
vlwww