如何使用箭头键在循环中移动对象

时间:2015-01-02 08:06:11

标签: java loops object

我正试图在一个连续的循环中移动一个方块,在循环运行时留下一条痕迹(想想BMtron游戏),但当我使用我的keylistener移动方块时,屏幕会冻结,尽管循环继续运行,但对象不会移动。这是一个片段:

public void keyPressed(KeyEvent e) {
    //System.out.println("keyPressed");
    if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
        //moveRight();
        //down.start();
        U = false;
        D = false;
        L = false;
        R = true;
        while (R = true) {
            x = x + 2;
            repaint();
            System.out.println("Right");
        }
    } else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
        R = false;
        U = false;
        D = false;
        L = true;
        while (L = true) {
            //moveLeft();
            x = x - 2;
            repaint();
            System.out.println("Left");
        }
    } else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
        R = false;
        U = false;
        L = false;
        D = true;
        while (D = true) {
            //moveDown();
            y = y + 2;
            repaint();
            System.out.println("Down");
        }
    } else if (e.getKeyCode() == KeyEvent.VK_UP) {
        R = false;
        D = false;
        L = false;
        U = true;
        //System.out.println("");
        while (U = true) {
            y = y - 2;
            repaint();
            System.out.println("Up");
        }
    }
}

如果你想要整个代码,请告诉我。

1 个答案:

答案 0 :(得分:3)

在Java中,赋值的表达式返回赋值的值。注意你的循环:

while(R = true)
        ↑

你需要比较而不是分配。

您的循环将始终执行,因为它就像写while(true)true是指定值),并且您将运行一个冻结程序的无限循环。这就是为什么我们非常建议在比较布尔值时不使用==!=,它可以防止可能的错误。相反,只需写下:

while(R)  //same as while(R == true) but please don't use ==