Olá David! Bom Dia.
Essa mesma idéia está descrita no tutorial do Tonypa...
SObre a detecção de colisão, a teoria dos experientes é a seguinte:
Você tem que ter um atributo em cada tile para dizer se podemos andar
nele ou não. O tonypa usa walkable como nome para esse atributo.
Nos meus Tiles eu utilizo walkable, hostil e estou pensando num
atributo que permite diminuir a velocidade tbm...
O uso para fazer andar ou não é fácil. Simpleste prevemos a próximo
posição e permitimos o personagem andar ou não...
vou fazer um pseudo code aki para exemplificar:
//Pegamos onde será a próxima posição do personagem
if(key.isDown(KEY.Up){
proxPosX = personagem.x+ velocidade;
proxPosY = personagem.y+ velocidade;
}
//Com as posições futuras pegamos qual é o tile na nossa fase
Tile proxTile = getTile(proxPosX, proxPosY); // A função getTile
retorna o tile para as posições passadas como parâmetro
if(proxTile.walkable){ //Se o tile permitir andar
//setamos a velocidade de acordo com esse tile
velocidade = proxTile.getVelocidade;
//movimentamos o personagem de acordo com o tile
personagem.moveCima(velocidade);
}
É interessante setar a velocidade pois assim podemos fazer ele andar
do jeito que queremos, se for gelo, mato...
E se for um tile que mata o personagem? Podemos colocar dentro do if,
logo após se movimentar, o seguinte:
//Verificamos se ele pode matar:
try{
if(proxTile.getMatavel && ! personagem.isInvencivel){ //
Matavel é foda hehehe
personagem.descVida(); //se for um tile que perde vida
e o personagem não estiver invencivel, decrementamos a vida
//agora é foda, startamos um thread de invencibilidade,
que simplesmente segura a invencibilidade do personagem pelo tempo
determinado
personagem.startInvencivel(); //este método poderia esta
dentro do descVida...
}
}catch(MorteException morte){
gameOver();
}
É importante dentro do personagem no método descVida tratar se ele for
morrer, a invencibilidade e tudo mais. Não é má prática lançar
excessão qaundo o cara morre, é um uso diferente do que ficar lendo a
vida do cara...
IMPORTANTE: Leiam sobre jogos gente, pô, jogo é uma forma de programar
diferente, vc num precisa ficar reinventando a roda, isso é coisa de
cara do que não se adequa a programação no atual momento.
Para finalizar, alguém quer discordar ou propor uma forma melhor de
tratar a morte do personagem?