Pessoal, pesquisei MUITO (e não foi só um dia não), mas não encontrei uma solução ideal para o seguinte problema.
Tenho minhas telas em Canvas, mas para mapear a ação do usuário com as teclas, o keyCode do keyPressed muda de aparelho para aparelho.
Já tentei pegar o cógigo da tecla, nome da tecla. mas nada me resolve, então fui atrás de como o MIDP faz isso, e vi que ele usa a constante Display.KEYPRESSED_UP, algo assim, mas ela não está disponível quando tento acessá-la. Então, qual seria a solução que o pessoal que já implementou bibliotecas em Canvas (já vi alguns cometando que fizeram bibliotecas em Canvas) usou para driblar essa diferença entre aparelhos?
Ao invés de usar diretamente o keyCode, use assim:
[code]public void keyPressed(int keyCode) {
int gameAction = getGameAction(keyCode);
switch(gameAction) {
case UP: // FAZER ALGUMA COISA
break;
case DOWN: // FAZER ALGUMA COISA
break;
case LEFT: // FAZER ALGUMA COISA
break;
case RIGHT: // FAZER ALGUMA COISA
break;
case FIRE: // FAZER ALGUMA COISA
break;
case GAME_A: // FAZER ALGUMA COISA
break;
case GAME_B: // FAZER ALGUMA COISA
break;
case GAME_C: // FAZER ALGUMA COISA
break;
case GAME_D: // FAZER ALGUMA COISA
break;
default: // FAZER ALGUMA COISA
}
Ao invés de usar diretamente o keyCode, use assim:
[code]public void keyPressed(int keyCode) {
int gameAction = getGameAction(keyCode);
switch(gameAction) {
case UP: // FAZER ALGUMA COISA
break;
case DOWN: // FAZER ALGUMA COISA
break;
case LEFT: // FAZER ALGUMA COISA
break;
case RIGHT: // FAZER ALGUMA COISA
break;
case FIRE: // FAZER ALGUMA COISA
break;
case GAME_A: // FAZER ALGUMA COISA
break;
case GAME_B: // FAZER ALGUMA COISA
break;
case GAME_C: // FAZER ALGUMA COISA
break;
case GAME_D: // FAZER ALGUMA COISA
break;
default: // FAZER ALGUMA COISA
}
[quote=boone]Me responda você ! Detesto postar sem ser a resposta definitiva, mas depois do seu “choro”, imaginei que vc não tivesse tentado tudo. Eu estava certo.
GameCanvas, FullCanvas (Nokia) e outros tipos de Canvas são objetos que muitos se esquecem que estão aí para ajudar o desenvolvedor.[/quote]
Estarei testando esse fds e posto o resultado, de qualquer forma, obrigado pelas dicas…
E além disso, olhando a classe GameCanvas rapidamente, vi o getKeyStates() e me surgiu uma dúvida:
posso usar o keyPressed() normalmente?
[quote]Estarei testando esse fds e posto o resultado, de qualquer forma, obrigado pelas dicas…
E além disso, olhando a classe GameCanvas rapidamente, vi o getKeyStates() e me surgiu uma dúvida:
posso usar o keyPressed() normalmente?[/quote]
Aí teria que passar false no super(), não seria melhor usar um loop para dar o poll nas teclas?
[quote=Will_HRock][quote]Estarei testando esse fds e posto o resultado, de qualquer forma, obrigado pelas dicas…
E além disso, olhando a classe GameCanvas rapidamente, vi o getKeyStates() e me surgiu uma dúvida:
posso usar o keyPressed() normalmente?[/quote]
Aí teria que passar false no super(), não seria melhor usar um loop para dar o poll nas teclas?[/quote]
Será que um while(true) verificando as teclas não seria mais custoso?
O GameCanvas funciona quase da mesma forma que o Canvas. Você não precisa de “while (true)” ou outro mecanismo. Se esta construindo uma aplicação normal (que não seja um jogo) pode confiar nos eventos keyPressed(), keyReleased() etc. O método getGameAction() também funciona bem para as teclas direcionais e SELECT. Porém você precisa tomar cuidado com os SOFTKEYS pois em alguns aparelhos estas teclas possuem códigos negativos e ao passá-las para getGameAction() uma Exception é gerada (Samsung). Isso significa também que em alguns aparelhos você não tem como saber se é SOFTKEY esquerdo ou SOFTKEY direito (por causa do exception). Então não há outra forma senão a velha “tentativa e erro”. Felizmente a maioria dos aparelhos usa o mesmo código e você pode então assumir que valores como -6 ou -21 são SOFTKEY esquerdo, -7 ou -22 SOFTKEY direito e -8 a tecla CLEAR.
[quote=boone]Mais mastigado do que isto impossível né…
Nossa aleantonello, vc vai pro céu. Eu já não tenho mais esta paciência toda para explicar assim não…[/quote]
E quem disse que quero mastigado?
Queria saber das experiências de vcs, agora se não quiser ajudar e acha que quero mastigado, nem perca seu tempo postando…
Eu disse que o aleantonello entrou num nível de detalhe que eu não entraria, até porquê minha indicação do link já era o suficiente, basta usá-la como ponto de partida.
Por isto que quando vi que ele postou mastigado, faleu que ELE iria pro céu, pois este “raciocínio” que ele teve, espera-se de quem leu o artigo do link e fez mais buscas sobre o GameCanvas depois.