Итак, у меня есть этот лист спрайтов (4 спрайта в строке и 3 в столбце), который я использую для анимации персонажа в создаваемой мной игре. Он отлично анимируется без проблем, как я хочу

Проблема начинает возникать, когда я хочу изменить состояние с «рывок» (бег к врагу) на «атака» (ну, атаковать врага), похоже, спрайт атаки не воспроизводится с самого начала (индекс 0)

Я использовал self._currentFrame = 3 в функции set_state (self), чтобы при изменении функции она сбрасывала кадр до третьего кадра, что делает (self.currentFrame + 1)% 4 возвращает 0

Но все же иногда он не делает то, что я хочу, и запускает анимацию примерно с 2 или 3 индекса (конец анимации). Как убедиться, что моя анимация начинается с индекса 0?

Мой код обновления выглядит следующим образом, если это помогает

    self.frameTime += dt

    if self.fps is not -1:
        while self.frameTime > 1.0 / self.fps:
            self.frameTime -= 1.0 / self.fps
            self.currentFrame = (self.currentFrame + 1) % 4
            self.currentVFrame = (self.currentVFrame + 1) % 3
0
Daggio 8 Авг 2010 в 23:21

2 ответа

Лучший ответ

Спасибо, Эндрю, но я решил. Оказалось, мне просто нужно настроить self.fps (кадровую скорость анимации, а не экран) так, чтобы 1.0 / self.fps было меньше, чем self.frameTime

Спасибо, Эндрю, я могу как-нибудь поднять тебе репутацию? или закончить этот вопрос?

Редактировать: почему currentFrame напечатан как 3? Класс Actor (класс, унаследованный от AnimatedGameObject) имеет функцию set_state(self, newState) (которая изменяет self.currentFrame на 3), которая изменяет состояние, так что приведенный выше код обновления (как я объяснил) возвращает 0 и анимация начинается с начала кадра

Проблема в том, что когда self.fps в функции update(self, dt) имеет значение 4, 1.0 / self.fps имеет меньшее значение, чем self.frameTime, и, как результат, {{X4 }} не установлен в 0 в начале анимации Так что мне просто нужно удвоить self.fps до 8, и код работает так, как я хочу

0
Daggio 9 Авг 2010 в 18:22

Проверяли ли вы, что начальное значение действительно равно 3, прежде чем эта логика будет выполнена? Я спрашиваю, потому что ваше резюме включает ссылку на self._currentFrame, когда ваш код ссылается на self.currentFrame - вы назначаете одну переменную и проверяете другую?

Отредактируйте дополнительный «ответ», опубликованный тем, кто задает вопрос:
См. https://meta.stackexchange.com/questions/5234/how- выполняет-принимает-ответ-работу, чтобы получить инструкции о том, как (и когда) принимать ответ, а также о том, почему вам выгодно делать это с каждым задаваемым вами вопросом.

0
Community 20 Мар 2017 в 10:29