2016-10-02 2 views
2

私はJavaの微調整を使って2Dのゲームを作ろうとしていますが、私のコントロールをスムーズにしたいのですが、問題は左キーを押しながらUPキーを押しているときです。理由を知らない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)が真となります。 同様に、getKeyStates()を呼び出している間にDパッドのLEFTを押すと、4が戻ってきます。

しかし、UPとLEFTを同時に押すと、2と4が戻ってくることはありません。これは明らかに2つのintであるからです。getKeyStates()は1つのintを返します。

2 + 4 = 6のように戻ってくるのはやや単純です。 したがって、UPとLEFTを同時に押すと、if (getKeyStates()==6)と尋ねると真となります。またはif (getKeyStates()==UP_PRESSED+LEFT_PRESSED)。通常

しかし、あなたはこのように、ビット演算子を使用して頼む:そのアプローチを使用すると、あなたは同時に押すことができます8つの方向のいずれかで動作しますので

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

+0

ありがとうございました。 – xFaceless