需要一种方法让我的角色在向左/向右移动时跳跃

时间:2012-05-10 00:34:33

标签: java

我已经在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();

1 个答案:

答案 0 :(得分: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
    }
}