首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >定时器不会连续执行方法中的函数Java

定时器不会连续执行方法中的函数Java
EN

Stack Overflow用户
提问于 2019-03-01 03:36:03
回答 1查看 57关注 0票数 2

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

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

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

代码语言:javascript
复制
    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,它就会像一个循环一样,连续运行这个方法,每秒向右移动一个空格。然而,我正在尝试让它向右移动一步,然后向下移动一步。目前,它只是在每个节拍上沿对角线移动。

我如何实现一个解决方案来执行每个调用,就像它是一个指令列表一样?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-01 03:48:53

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

代码语言:javascript
复制
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;
    }
});

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

代码语言:javascript
复制
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;
    }
});

更新:如果你想遍历一个特定的路径,使用一个数组:

代码语言:javascript
复制
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;
    }
});
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54933015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档