Estou tentando fazer um jogo bem simples em j2me, mas como sou iniciante estou com vários problemas. O maior problema q estou passando agora e quando a movimentação do personagem na tela.
O jogo é o sokoban, ou box world para alguns, para quem não sabe é o jogo onde tem q ficar empurrando caixas.
as paredes do cenário eu fiz usando tiled e o personagem é um sprite, fiz a função para o personagem andar pela sala e até ae tudo bem, mas quando fui colocar a colisão com as paredes ae deu zica.
Fiz 4 funções de colisão dentro da classe do personagem e na classe GameScreen, que estende a GameCanvas, coloquei um conjunto de else if que pegam o botão que foi pressionado e chama e chama a função de colisão especifica para ver se houve ou não colisão. O problema é que quando o personagem colide com a parede seja em qualquer direção ele tá parando de se mover em todas as outras tb. Alguem sabe como posso resolver isso?
Segue esse pedaço do meu código.
//Classe do Personagem
public class PlayerSprite extends Sprite{
…
public boolean ColisaoCima(boolean key,TiledLayer other){
if(key && collidesWith(other, true))
return true;
else
return false;
}
public boolean ColisaoBaixo(boolean key,TiledLayer other){
if(key && collidesWith(other, true))
return true;
else
return false;
}
public boolean ColisaoDireita(boolean key,TiledLayer other){
if(key == true && collidesWith(other, false))
return true;
else
return false;
}
public boolean ColisaoEsquerda(boolean key,TiledLayer other){
if(key && collidesWith(other, false))
return true;
else
return false;
}
}
//Clase Game Screen
public class GameScreen extends GameCanvas implements Runnable, CommandListener{
…
int keyStates = getKeyStates();
//Player na posição original
player.setFrame(0);
// Player Moves
boolean esquerda = (keyStates & LEFT_PRESSED) != 0;
boolean direita = (keyStates & RIGHT_PRESSED) !=0;
boolean cima = (keyStates & UP_PRESSED) != 0;
boolean baixo = (keyStates & DOWN_PRESSED) != 0;
if ( (keyStates & LEFT_PRESSED) != 0 && !player.ColisaoEsquerda(esquerda,terrain)){
player.moveLeft();
}else if ((keyStates & RIGHT_PRESSED) !=0 && !player.ColisaoDireita(direita,terrain)){
player.moveRight();
} else if ((keyStates & UP_PRESSED) != 0 && !player.ColisaoCima(cima,terrain)){
player.moveUp();
} else if((keyStates & DOWN_PRESSED) != 0 && !player.ColisaoBaixo(baixo,terrain)){
player.moveDown();
}
Valeu ae pessoal.
Abraço