2016-10-02 76 views
2

我正在嘗試使用java microedition製作2D遊戲,我只是想讓我的控制更流暢,但問題是當我按下UP鍵時按下LEFT鍵條件不起作用不知道爲什麼J2ME Con​​trols Left and UP

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; 
    }    
} 

回答

1

getKeyStates()在一個int返回鍵的狀態。各種鍵具有單獨的值。 UP_PRESSED = 0x0002和LEFT_PRESSED = 0x0004。因此,如果您在撥打getKeyStates()時按下UP鍵,則會返回2,因此if (getKeyStates()==UP_PRESSED)將爲真。 同樣,如果您在撥打getKeyStates()時按下了D-pad上的LEFT,則會返回4。

但是如果你同時按UP和LEFT,你不能回到2和4 - 因爲這顯然是2個整數 - 而getKeyStates()只返回一個int。

雖然你做的回覆很簡單:2 + 4 = 6. 因此,如果同時按下UP和LEFT,詢問if (getKeyStates()==6)將會成立。或者if (getKeyStates()==UP_PRESSED+LEFT_PRESSED)

通常,雖然,你會問使用位運算符,就像這樣:

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; 
}    
} 

,因爲使用這種方法可以與任何的8個方向,你可以在同一時間按下的工作。

+0

非常感謝你先生:) – xFaceless