1

すでにy軸のジャンプは正常に実行されていますが、左右のキーを押しながらジャンプする「dx」を使用できるようにしたいです(たとえば、右のキーを押して右に移動し、静止しているときにジャンプする場合)それを保持すると、キャラクターは「対角線」のように動きます)

私の主なジャンプコード(ジャンプキーが押されたときにタイマーがアクティブになります):

 public void actionPerformed (ActionEvent e) {
    dy += 1;
        y_pos += dy;
    if (y_pos >= 400) {
        dy = 0;
        y_pos = 400;
       timer.stop();
    }   
    repaint();
}  

今私のKeyEventコード:

            if (command == KeyEvent.VK_RIGHT){
                x_pos += 5;
                right = true;
            }
            if (command == KeyEvent.VK_LEFT) {
                x_pos -= 5;
                right = false;
            }
            if (command == KeyEvent.VK_UP) {    
                if (!(timer.isRunning()))
                    dy = -20;   
                timer.start();
            }   
            dr.repaint();
4

1 に答える 1

3

以下は、入力ロジックを実装する方法です。入力処理をさらに掘り下げたい場合は、いくつかの選択肢があることに注意してください。この実装を使用すると、キーボード入力がゲームの世界に及ぼす影響から分離されます。これはいくつかの点で便利です。たとえば、キーの押下や繰り返しの頻度に関係なく、キャラクターの速度は一定です (ゲーム ループのタイミングや動きが正しく処理されている場合)。

とにかく、いくつかの擬似コード:

// Global:
array keysdown;
keysdown[left] = false;
keysdown[right] = false;
keysdown[up] = false;

// The all-important game loop:
while (true) {
    pollInputs();
    doMovement();
    draw();
}

function pollInputs () {
    foreach (key that you want to handle) {
        if (key.state == down) {
            keysdown[key] = true;
        } else {
            keysdown[key] = false;
        }
    }
}

function doMovement () {
    if (keysdown[left]) {
        // move character left
    } else if (keysdown[right]) {
        // move character right
    }

    if (keysdown[up]) {
        // initiate jump
    }
}
于 2012-05-10T01:35:22.313 に答える