Как правильно добавить следы в мою игру в Java libGDX

Я пытаюсь добавить следы в свою игру, поэтому, когда игрок идет по снегу или песку и т. д., он оставляет маленькие следы, которые исчезают. Этот код ниже почти работает. Что происходит, так это то, что он постоянно оставляет новые следы, когда игрок ходьбы, так что я получаю длинный ряд неразличимой сетки следов, которые обновляются с каждым игровым циклом.

Я считаю, что мне нужна задержка между новыми следами, но я не уверен, как это правильно сделать. У кого-нибудь есть предложения?

if (player.overlaps(snow))
          { 
             if (player.getSpeed() != 0)
             {
             FootPrint footPrint = new  FootPrint(0,0, mainStage);
             hero.toFront();
             footPrint.setPosition(player.getX(), player.getY());
             footPrint.addAction(Actions.fadeOut(5.0f));   
             footPrint.addAction(Actions.after(Actions.removeActor()));
              }
         }
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
Что такое управление транзакциями JDBC и как оно используется для поддержания согласованности данных?
Что такое управление транзакциями JDBC и как оно используется для поддержания согласованности данных?
Управление транзакциями JDBC - это мощная функция, которая позволяет рассматривать группу операций с базой данных как единую единицу работы. Оно...
Выполнение HTTP-запроса с помощью Spring WebClient: GET
Выполнение HTTP-запроса с помощью Spring WebClient: GET
WebClient - это реактивный веб-клиент, представленный в Spring 5. Это реактивное, неблокирующее решение, работающее по протоколу HTTP/1.1.
Gradle за прокси-сервером
Gradle за прокси-сервером
Создайте проект Gradle под сетевым прокси.
1
0
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете добавить экземпляр FootprintIntervalCounter и вызвать его в своем алгоритме. Наивная реализация:

public class FootprintIntervalCounter {

    private long lastRenderTimeMillis;
    private long interval;
    private boolean renderingCompletionFlag;

    public boolean isFootprintNeeded() {
        if (!renderingCompletionFlag) {
            return false;
        }
        long currentTime = System.currentTimeMillis();
        boolean isNeeded = (currentTime - lastRenderTimeMillis) > interval;
        if (isNeeded) {
            renderingCompletionFlag = false;
        }
        return renderingCompletionFlag;
    }
    
    public void afterFootprintIsRendered(long renderTimeMillis) {
        renderingCompletionFlag = true;
        lastRenderTimeMillis = renderTimeMillis;
    }
}

Спасибо :) В итоге я реализовал версию вашего ответа, и она не работает нормально :)

Robert 05.02.2021 17:19

Другие вопросы по теме