2016-10-02 16 views
2

자바 마이크로 디션을 사용하여 2 차원 게임을 만들려고하고 있습니다. 컨트롤을 부드럽게하고 싶지만 문제는 왼쪽 키를 누른 상태에서 위로 키를 누르고있는 동안 상태가 작동하지 않습니다. 왜 그런지 모르겠다J2ME 컨트롤 LEFT 및 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()을 호출하는 동안 D 패드에서 UP 키를 누르면 2가 반환되고 if (getKeyStates()==UP_PRESSED)은 true가됩니다. 마찬가지로, getKeyStates()을 호출하는 동안 d 패드에서 LEFT를 누르면 4가 다시 나타납니다.

그러나 UP과 LEFT를 동시에 누르면 두 번째와 네 번째로 돌아올 수 없습니다. 이는 분명히 2 개의 int이며 - getKeyStates()은 하나의 int 만 반환하기 때문입니다.

다시 생각해 보면 간단합니다. 2 + 4 = 6입니다. 따라서 UP/LEFT를 동시에 누르면 if (getKeyStates()==6)을 묻는 것이 true가됩니다. 또는 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