Prezados.
Sou completo novato em JME e venho pedir a vcs uns conselhos. Creio realmente que este problema seja realmente de iniciantes mesmo.
Estou desenvolvendo um jogo de celular de damas. Criei um metodo chamado colisao, que detecta se algum sprite colide com algumas das peças. Veja o código feito na correria mas depois eu melhoro ele:
[code] public Sprite colisao(Sprite sprite){
if(sprite.collidesWith(this.branca1, true))
{
return branca1;
}
else if(sprite.collidesWith(this.branca2, true))
{
return branca2;
}
else if(sprite.collidesWith(this.branca3, true))
{
return branca3;
}
else if(sprite.collidesWith(this.branca4, true))
{
return branca4;
}
else if(sprite.collidesWith(this.branca5, true))
{
return branca5;
}
else if(sprite.collidesWith(this.branca6, true))
{
return branca6;
}
else if(sprite.collidesWith(this.branca7, true))
{
return branca7;
}
else if(sprite.collidesWith(this.branca8, true))
{
return branca8;
}
else if(sprite.collidesWith(this.branca9, true))
{
return branca9;
}
else if(sprite.collidesWith(this.branca10, true))
{
return branca10;
}
else if(sprite.collidesWith(this.branca11, true))
{
return branca11;
}
else if(sprite.collidesWith(this.branca12, true))
{
return branca12;
}
else if(sprite.collidesWith(this.vermelha1, true))
{
return vermelha1;
}
else if(sprite.collidesWith(this.vermelha2, true))
{
return vermelha2;
}
else if(sprite.collidesWith(this.vermelha3, true))
{
return vermelha3;
}
else if(sprite.collidesWith(this.vermelha4, true))
{
return vermelha4;
}
else if(sprite.collidesWith(this.vermelha5, true))
{
return vermelha5;
} else if(sprite.collidesWith(this.vermelha6, true))
{
return vermelha6;
}
else if(sprite.collidesWith(this.vermelha7, true))
{
return vermelha7;
}
else if(sprite.collidesWith(this.vermelha8, true))
{
return vermelha8;
}
else if(sprite.collidesWith(this.vermelha9, true))
{
return vermelha9;
}
else if(sprite.collidesWith(this.vermelha10, true))
{
return vermelha10;
}
else if(sprite.collidesWith(this.vermelha12, true))
{
return this.vermelha12;
}
else if(sprite.collidesWith(this.vermelha11, true))
{
return vermelha11;
}
return sprite;
}[/code]
Depois utilizo para verificar se colide com o cursor quando clico no botão FIRE do celular para movimentação:
[code]if((Key & FIRE_PRESSED)!= 0){
colide = colisao(cursor1);
if(colide != cursor1)
{
cursor2.setVisible(true);
cursor2.setPosition(colide.getX(), colide.getY());
}
else
{
colide = colisao(cursor2);
movimenta_branca(colide,cursor1.getX(),cursor1.getY());
cursor2.setVisible(false);
}
}
[/code]
O problema aparece justamente quando tento usar o metodo movimenta_branca(nome provisório). O metodo funciona da seguinte maneira. Quando o jogador tenta mover a peça 2 casas pra frente, como quando se come uma peça, ele tenta detectar no meio do caminho se está passando por uma peça. Ele faz o teste de colisão usando a função e justamente ai ele falha, não retornando a peça com qual colide. Vejam o método:
[code]public void movimenta_branca(Sprite peca, int x , int y){
Sprite colidir;
int xAnterior = peca.getX();
int yAnterior = peca.getY();
if(peca != cursor2){
peca.setPosition(x, y); // seta a posiçao da peça igual a cursor1
}
if ((peca.getX() - xAnterior) == 0 || (peca.getY() - yAnterior) == 0)// peça não move para frente ou para tras
peca.setPosition(xAnterior, yAnterior);
if(peca.getY() - yAnterior == 50){ // caso tente andar duas casas
peca.setPosition(peca.getX() - ((peca.getX() - xAnterior)/2),peca.getY()- ((peca.getY() - yAnterior)/2) ); // volta para casa anterior e tenta colidiar
colidir = colisao(peca);
if(colisao(branca10) != peca) // caso colida com alguma peca
{
colisao(peca).setVisible(false); // come a peça e vai ate a posição
peca.setPosition(x, y);
}
else
peca.setPosition(xAnterior, yAnterior); senão a jogada não vale e volta a peça no lugar onde estava
}
if(peca.getX() - xAnterior == 50)
peca.setPosition(xAnterior, yAnterior);
}[/code]
No caso ele retorna a propria peça como se não tivesse colidido com nenhuma outra. Alguem pode me ajudar com este problema, não consigo saber o porque não retorna a peça com a qual ele colide.