2016-10-02 5 views
2

J'essaye de faire un jeu 2D en utilisant la microédition java et je veux juste rendre ma commande plus fluide mais le problème est quand j'appuie sur la touche GAUCHE tout en appuyant sur la touche HAUT la condition ne fonctionne pas. ne sais pas pourquoiCommandes J2ME GAUCHE et HAUT

public void moveJet2() throws IOException{ 
    int gameAction = getKeyStates(); 

    if(gameAction==LEFT_PRESSED && gameAction==UP_PRESSED){ 
     padX-=padXVel; 
     padY-=padYVel; 
    } 
    else if(gameAction==RIGHT_PRESSED){ 
     padX += padXVel; 
    } 
    else if(gameAction==UP_PRESSED){ 
     padY-=padYVel; 
    } 
    else if(gameAction==DOWN_PRESSED){ 
     padY+=padYVel; 
    }    
} 

Répondre

1

getKeyStates() retourne l'état des clés dans un seul int. Les différentes touches ont des valeurs individuelles. UP_PRESSED = 0x0002 et LEFT_PRESSED = 0x0004. Donc, si vous appuyez sur UP sur votre d-pad en appelant getKeyStates(), vous obtiendrez 2 retour, et if (getKeyStates()==UP_PRESSED) sera donc vrai. De même, si vous appuyez sur la touche GAUCHE du pavé directionnel tout en appelant le getKeyStates(), vous en récupérez 4.

Mais si vous appuyez simultanément sur UP et LEFT, vous ne pouvez pas revenir en arrière 2 et 4 - car il s'agit évidemment de 2 ints - et getKeyStates() ne renvoie qu'un seul int. Ce que vous obtenez, cependant, est plutôt simple: 2 + 4 = 6. Donc, demander if (getKeyStates()==6) sera vrai si vous pressez UP et LEFT en même temps. Ou if (getKeyStates()==UP_PRESSED+LEFT_PRESSED).

En règle générale cependant, vous demanderiez à l'aide du bit-opérateurs, comme ceci:

public void moveJet2() throws IOException{ 
int gameAction = getKeyStates(); 

if((gameAction & LEFT_PRESSED)!=0) { 
    padX -= padXVel; 
} 
if((gameAction & RIGHT_PRESSED)!=0) { 
    padX += padXVel; 
} 
if((gameAction & UP_PRESSED)!=0) { 
    padY-=padYVel; 
} 
if((gameAction & DOWN_PRESSED)!=0){ 
    padY+=padYVel; 
}    
} 

Parce que l'utilisation de cette approche fonctionnera avec l'une des 8 directions, vous pouvez appuyer en même temps.

+0

Merci beaucoup Mister :) – xFaceless