0

私はJavaでゲームを作っていて、プレーヤーの動きに取り組んでいますが、方向キーを押すたびにプレーヤーは動きますが、キーを離しても止まりません。

私は自分が間違っていることを見ることができないようです。誰かが私を正しい方向に向けることができますか?

// 入力クラスは KeyListener を実装します

public static final int LEFT    = 0;
public static final int RIGHT   = 1;
public static final int UP  = 2;
public static final int DOWN    = 3;

public boolean[] keys = new boolean[64];

public void getKeys(KeyEvent e, boolean move) {
    switch(e.getKeyCode()) {
    case KeyEvent.VK_LEFT:
        keys[LEFT]  = move;
        break;
    case KeyEvent.VK_RIGHT: 
        keys[RIGHT] = move; 
        break;
    case KeyEvent.VK_UP: 
        keys[UP]    = move; 
        break;
    case KeyEvent.VK_DOWN: 
        keys[DOWN]  = move; 
        break;
    case KeyEvent.VK_BACK_QUOTE: 
        keys[BQUOTE] = move; 
        break;
    }

    keys[OTHER] = move;
}

@Override
public void keyPressed(KeyEvent e) {
    getKeys(e, true);

}

@Override
public void keyReleased(KeyEvent e) {
    getKeys(e, false);

}

@Override
public void keyTyped(KeyEvent e) {
    // TODO Auto-generated method stub

}

// プレイヤー クラス

public void tick() {
    if (Engine.key_input.keys[KInput.LEFT]) {
        dx      = -speed;
    animDir = SpriteLoader.L;
    sprite  = SpriteLoader.anim(SpriteLoader.ANIM_PLAYER, animDir);
}
    if (Engine.key_input.keys[KInput.RIGHT]){
        dx      = speed;
        animDir = SpriteLoader.R;
        sprite  = SpriteLoader.anim(SpriteLoader.ANIM_PLAYER, animDir);
}
if (Engine.key_input.keys[KInput.UP]){
        dy      = -speed;
        animDir = SpriteLoader.U;
        sprite  = SpriteLoader.anim(SpriteLoader.ANIM_PLAYER, animDir);
}
if (Engine.key_input.keys[KInput.DOWN]){
         dy         = speed;
         animDir = SpriteLoader.D;
         sprite     = SpriteLoader.anim(SpriteLoader.ANIM_PLAYER, animDir);
}
}

// エンジン クラス

public class Engine {
    public Input key_input;
    public Engine() {
        key_input = new Input();
    }

    // add keyListener(Input) to component
}
4

3 に答える 3

1

これはあなたからの十分な情報ではありません。しかし、これは疑わしいです:

public boolean[] keys = new boolean[64]

keys「この値を使用したので、次回は無視したい」というコードはどこにありますか?

于 2013-06-07T22:03:22.850 に答える
0

ハンドラーでは、keys[] = true のみを設定していますが、それらを false に戻すことはありません。

解放されたすべてのキーの移動を解除する keyReleased() メソッドを追加する必要があります。

于 2013-06-07T22:06:18.340 に答える