我正在实施一个游戏,其中敌人AI从预先设定的动作量执行随机动作。 Iv实现了随机动作的执行,但这意味着每次更新游戏都会执行新动作。相反,我希望AI每1秒执行一次动作,例如。怎么做?这是我的随机动作代码:
public class RandomAction implements Controller {
Action action = new Action();
@Override
public Action action() {
Random rand = new Random();
action.shoot = rand.nextBoolean();
action.thrust = rand.nextInt(2);
action.turn = rand.nextInt(3) - 1;
return action;
}
}
答案 0 :(得分:1)
我假设您的应用程序反复调用不同对象的action()
方法,并且您希望每秒只更改一次RandomAction行为,而不是每次调用。你可以这样做:
public class RandomAction implements Controller {
Action action = new Action();
Random rand = new Random();
long updatedAt;
public RandomAction() {
updateAction(); // do first init
}
@Override
public Action action() {
if (System.currentTimeMillis() - updatedAt > 1000) {
updateAction();
}
return action;
}
private void updateAction() {
action.shoot = rand.nextBoolean();
action.thrust = rand.nextInt(2);
action.turn = rand.nextInt(3) - 1;
updatedAt = System.currentTimeMillis();
}
}
如您所见,只有在自上次更新后经过1秒后,才会使用随机值更新操作。更新时间变量设置为此后的当前时间。