私は Java ゲームの開発に取り組んでいます。私が直面している問題は、キー ストロークの実装です。私が持っているコードは KeyListeners を適切に実装していますが、ゲーム ウィンドウまたはその外側をクリックするとすぐに KeyListener が機能しなくなります。
ウィンドウを最小化して元に戻すことができ、KeyListener が再び機能するため、これは重要な問題であると確信しています。
私のセットアップは、描画用の Canvas オブジェクトを含む JFrame です。JFrame に追加する通常の KeyListener があります。
ゲームをクリックすると、Canvas がフォーカスされるのではないでしょうか? ただし、isFocasable() を false に設定しているため、そうすべきではありません。
混乱がないように、私が使用しているコードの一部を次に示します。
ここでは、画面とキャンバスを作成します
public final void initScreen(DisplayMode dm, boolean fs, boolean vs)
{
screen = new EScreen (dm, fs, vs);
canvas = new EGameCanvas (screen);
canvas.setFocusable (false);
screen.add(canvas);
keyMapManager = KeyMapManager.getInstance (this);
if (fs) {
screen.setFullScreen ();
}
else {
screen.setWindowed ();
}
}
ここに KeyListener を追加します (KeyMap は KeyListener のみを実装することに注意してください)。
public boolean setActiveKeyMap(String newKeyMap)
{
if (keyMaps.containsKey(newKeyMap)) {
screen.removeKeyListener (activeKeyMap);
activeKeyMap = keyMaps.get (newKeyMap);
screen.addKeyListener (keyMaps.get (newKeyMap));
return true;
}
return false;
}
そして、これが単に変数を変更した私のkeyPressedイベントです
public void keyPressed(KeyEvent ev) {
if (ev.getKeyCode() == KeyEvent.VK_ESCAPE)
game.setIsRunning (false);
}
このコードはすべて正常に機能することに注意してください。つまり、ゲーム ウィンドウをクリックするまでは。どこにも MouseListeners を実装していません。また、私はこのコードを実装します:
screen.setFocusTraversalKeysEnabled (false);
最後に、ご覧のとおり、私のゲームはフルスクリーン モードとウィンドウ モードの両方を処理します。この問題は両方で発生します。