libGDX订购任务

时间:2016-12-26 22:23:00

标签: java libgdx

我正在尝试在libGDX中制作游戏。我在尝试让AI按顺序完成任务时遇到问题。我最初使用libGDX Timers来安排任务,但这并不适合我想要完成的任务。

游戏是基于策略回合的游戏,因此任务完成的顺序非常重要。

以下是我目前正在做的事情

float teamSizeDelay = team.getUnits().size() * gameSpeed;
float eventDelay = gameSpeed * 2;

// Move Units
if (team.getUnits().size() > 0 && enemyTeam.getHqHealth() > 0) {
    unitIndex = 0;
    for (int i = 0; i < team.getUnits().size(); i++) {
        Timer.schedule(new Timer.Task() {

            @Override
            public void run() {
                selectUnit(unitIndex);
                unitIndex++;
            }
        }, i * gameSpeed);
    }
}

int availableFactories = getAvailableFactories();

// Spawn Units
Timer.schedule(new Timer.Task() {

    @Override
    public void run() {
        if (enemyTeam.getHqHealth() > 0)
            spawnUnits();
    }
}, teamSizeDelay + eventDelay * 2);

float spawnDelay = availableFactories * gameSpeed;

// End Turn
if (enemyTeam.getHqHealth() > 0) {
    Timer.schedule(new Timer.Task() {

        @Override
        public void run() {
            endTurn();
        }
    }, (teamSizeDelay) + (eventDelay * 3) + (spawnDelay));
}

正如您所看到的,使用计时器可能会很混乱,特别是时间安排

因此,如果有人知道更好的方法,我们将非常感激

1 个答案:

答案 0 :(得分:0)

因此,如果我理解正确,您希望按顺序执行一系列任务,但任务之间会有时间延迟。在libGDX中执行此操作的一种方法是扩展Scene2D Action class并为您的AI创建不同的操作,使用SequenceAction class对它们进行排序,并使用DelayAction class将它们分隔开来。

设置AI的操作看起来像这样:

action = new SequenceAction();
for(Unit u : units) {
  action.addAction(new MoveUnitAction( ... ));
  action.addAction(Actions.delay( gameSpeed ));
}
action.addAction(new SpawnUnitsAction( ... ));
action.addAction(Actions.delay( gameSpeed ));
action.addAction(new EndTurnAction( ... ));

然后你运行动作直到它完成如下:

public void render(float delta) { // Or whatever your per-frame method is called.
  if(action.act(delta)) {
    // This line runs when the AI's tasks are complete.
  }
}

如果您不想使用Scene2D,您当然可以实施自己的解决方案,但它的工作方式基本相同。