计时器无法连续执行方法内的函数Java

时间:2019-02-28 19:36:03

标签: java

我正在尝试在自己制作的游戏中实现一项功能,如果您按一下按钮,汽车将自动完成赛道的一圈而无需任何用户输入。

为此,我为每个运动方向创建了函数。

我需要在每个函数调用之间创建一个延迟,否则它将在我按下按钮进行初始化的那一刻完成。我添加了以下内容:

    public void driveCar()
{
    Timer t = new Timer(1000 * 1, new ActionListener() {
        public void actionPerformed(ActionEvent e) {

            move(MOVE_RIGHT);
            move(MOVE_DOWN);

        }
    });
    t.start();
}

如果我只有MOVE_RIGHT,它将作为循环并连续运行此方法,并每秒向右移动一个空间,但是,我正在尝试使其移动到一次,然后向下一步。目前,它只在每个刻度线对角移动。

我如何实现一种解决方案,使它像指令列表一样执行每次调用?

1 个答案:

答案 0 :(得分:4)

如果您希望计时器的动作在每个刻度上交替向右移动或向下移动,则需要一个字段来跟踪进度:

Timer t = new Timer(1000 * 1, new ActionListener() {
    private boolean moveRight = true;
    public void actionPerformed(ActionEvent e) {
        if (moveRight)
            move(MOVE_RIGHT);
        else
            move(MOVE_DOWN);
        moveRight = ! moveRight;
    }
});

如果您有两个以上不同的操作,则可以使用步骤计数器:

Timer t = new Timer(1000 * 1, new ActionListener() {
    private int step = 0;
    public void actionPerformed(ActionEvent e) {
        switch (step) {
            case 0:
                move(MOVE_RIGHT);
                break;
            case 1:
                move(MOVE_DOWN);
                break;
            case 2:
                move(MOVE_UP);
                break;
        }
        step = (step + 1) % 3;
    }
});

更新:如果要遍历特定路径,请使用数组:

final int[] path = { MOVE_RIGHT, MOVE_DOWN, MOVE_UP, MOVE_UP, MOVE_LEFT, MOVE_DOWN };
Timer t = new Timer(1000 * 1, new ActionListener() {
    private int step = 0;
    public void actionPerformed(ActionEvent e) {
        move(path[step]);
        step = (step + 1) % path.length;
    }
});