определение первого спрайта для анимации в python / pygame - PullRequest
0 голосов
/ 08 августа 2010

поэтому у меня есть эта таблица спрайтов (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

Ответы [ 2 ]

0 голосов
/ 09 августа 2010

Спасибо, Андрей, но я решил это. Оказалось, мне просто нужно настроить 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, и как результат, self.currentFrame не устанавливается в 0 в начале анимации Так что на самом деле мне просто нужно удвоить self.fps до 8, и код работает так же, как я хочу, чтобы

0 голосов
/ 09 августа 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...