java - 计时器不连续执行方法中的函数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,它将充当循环并连续运行此方法并每秒向右移动一个空格但是,我正在尝试使它向右移动一步,然后向下一步。目前,它只是在每个刻度上沿对角线移动。
我怎样才能实现一个解决方案来执行每个调用,就好像它是一个指令列表?
解决方案
如果您希望计时器的操作在每个刻度上交替向右移动或向下移动,您需要一个跟踪进度的字段:
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;
}
});
推荐阅读
- bing-maps - bing 地图街边可以单独使用吗?
- perl - 是否可以更改 Perl 安装目录
- javascript - 无法更改组件内的值
- codeigniter - 缓存 REST API 调用的查询结果
- python - 在 Python 中修改列表中的字符串
- reporting-services - 存储过程中的多个临时表并创建 ssrs
- css - 如何修复不跨越整个网格元素的悬停属性?
- anylogic - 如何从传递给函数的群体中访问单个代理?
- apache - 使用 IP 时连接被拒绝,但使用 localhost 时连接被拒绝
- jquery - 左侧的表情符号符号和左侧的表情符号框也使用插件