Я пытаюсь сделать игру в libGDX. У меня есть проблема с попыткой заставить ИИ делать задачи в порядке. Первоначально я использовал таймеры libGDX для планирования задач, но это не совсем соответствует тому, что я пытаюсь выполнить.
Игра является стратегия пошаговая игра, поэтому порядок, в котором задачи выполняются важно.
Вот как я в настоящее время это делаю
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));
}
Как вы можете видеть, использование таймеров может быть грязным, особенно с таймингами
Так что если кто-то знает лучший способ сделать это, было бы очень приятно
Поэтому, если я правильно понимаю, вы хотите выполнить кучу задач последовательно, но с задержками времени между задачами. Одним из способов сделать это в libGDX было бы расширить
Action
класс Scene2D и создать различные действия для вашего AI, последовательность их сSequenceAction
классом , и пространство их с помощьюDelayAction
класса .Настройка действий вашего ИИ будет выглядеть примерно так:
Затем запустите действие, пока оно не завершится так:
Если вы не хотите использовать Scene2D, вы можете, конечно, реализовать свое собственное решение, но оно будет работать по существу таким же образом.