绑定键移动图像

时间:2015-05-14 02:31:29

标签: java swing keylistener

我正在为一个学校项目开发游戏,作为一个步骤,我必须将键绑定到将从x-y轴添加/减去的图像。然而,我做它的方式似乎不起作用,而不是添加少量增加x / y很多,并将图像传送离开屏幕。

KeyListener代码

public void keyPressed(KeyEvent e) {

    if (e.getKeyCode() == 87) {
        up = true ;
        if (e.getKeyCode() == 65) {
            left = true ; 
        }
        if (e.getKeyCode() == 68) {
            right = true ;
        }
        if (e.getKeyCode() == 83) {
            down = true ;
        }
    }

}

@Override
public void keyReleased(KeyEvent e) {

    if (e.getKeyCode() == 87) {
        up = false ;
    }
    if (e.getKeyCode() == 65) {
        left = false; 
    }
    if (e.getKeyCode() == 68) {
        right = false ;
    }
    if (e.getKeyCode() == 83) {
        down = false ;
    }

}

游戏循环

public void run() {

    while(running) {

        //Player movement
        if (up) {
            y++ ;
        }
        if (left) {
            x-- ;
        }
        if (right) {
            x++;
        }
        if (down) {
            y-- ;
        }
        //Player movement

    }
}   

图形循环

protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    //Graphical loop start
    g.drawImage(Player, x, y, null) ;       

    //Graphical loop end
    repaint();

2 个答案:

答案 0 :(得分:3)

代码的工作方式与其应有的方式相同。你只忘了一件事:用于移动图像的while - 循环运行速度比你想象的要快得多。只需插入一个Thread.sleep(someDelay)即可使循环运行得更慢,并且图像应随着更多用户友好的方式移动。速度。

答案 1 :(得分:3)

不回答你的问题,但是:

if (e.getKeyCode() == 87) 

不要使用“魔术数字”。人们不知道“87”是什么意思。使用API​​提供的字段名称:

if (e.getKeyCode() == KeyEvent.VK_UP) 

另外,在paintComponent()方法中,你有:

//Graphical loop end
repaint();

不要在绘画方法中调用repaint()。这将导致无限循环。摆脱那段代码。