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 回答