Получите номер кадра для диапазона циклической анимации, основанный только на системном времени. ⇐ Python
-
Anonymous
Получите номер кадра для диапазона циклической анимации, основанный только на системном времени.
Я ищу способ анимировать спрайт, используя только системное время, без необходимости увеличивать и сохранять активный кадр или время, передаваемое как переменную. Я смогу добиться этого, правильно растянув и зациклив мс, чтобы получить диапазон, учитывая скорость анимации, общее количество кадров и диапазон, который я хочу получить. Мой проект основан на Pygame, и если у него нет более полезной функции для этого, я пытаюсь добиться этого с помощью общего значения Python time.time().
Предположим, у меня есть спрайт с 30 кадрами, и сейчас я хочу зациклить кадры с 10 по 20 со скоростью 2 кадра в секунду (переход каждые 0,5 секунды). У меня есть значение «миллисекунды, прошедшие с 1 января 1970 года»: мне нужно преобразовать его в целое число от 10 до 19, чтобы указать текущий кадр. Например: если я вызову функцию сейчас, я получу 18, если пройдет 0,25 секунды, я все равно получу 18, если на этот раз пройдет еще 0,25 секунды, я получу 19< /code>, я вызываю функцию снова через 0,5 секунды и получаю 10 при ее перезапуске. Если я подожду целую секунду, а затем вызову ее снова, я теперь получу 12.. р> Пожалуйста, предложите самое дешевое решение, если это возможно, я буду использовать его там, где вычисления часты и дороги. В обычных обстоятельствах я бы сохранил старое время, а затем сравнил бы, сколько времени прошло с момента последнего вызова, но я делаю это в пуле потоков, который не может влиять на внешние переменные, поэтому я не могу сохранять постоянные изменения в основном потоке. . Единственным недостатком этого метода является то, что отсчет может начинаться откуда угодно, поэтому анимация не всегда будет воспроизводиться с начала диапазона... это можно обойти, указав моему классу спрайтов текущее время до того, как потоки начнут работать, а затем сместить на основе этого , но это не имеет большого значения, поэтому, если это слишком сложно, эту часть можно пропустить.
Я ищу способ анимировать спрайт, используя только системное время, без необходимости увеличивать и сохранять активный кадр или время, передаваемое как переменную. Я смогу добиться этого, правильно растянув и зациклив мс, чтобы получить диапазон, учитывая скорость анимации, общее количество кадров и диапазон, который я хочу получить. Мой проект основан на Pygame, и если у него нет более полезной функции для этого, я пытаюсь добиться этого с помощью общего значения Python time.time().
Предположим, у меня есть спрайт с 30 кадрами, и сейчас я хочу зациклить кадры с 10 по 20 со скоростью 2 кадра в секунду (переход каждые 0,5 секунды). У меня есть значение «миллисекунды, прошедшие с 1 января 1970 года»: мне нужно преобразовать его в целое число от 10 до 19, чтобы указать текущий кадр. Например: если я вызову функцию сейчас, я получу 18, если пройдет 0,25 секунды, я все равно получу 18, если на этот раз пройдет еще 0,25 секунды, я получу 19< /code>, я вызываю функцию снова через 0,5 секунды и получаю 10 при ее перезапуске. Если я подожду целую секунду, а затем вызову ее снова, я теперь получу 12.. р> Пожалуйста, предложите самое дешевое решение, если это возможно, я буду использовать его там, где вычисления часты и дороги. В обычных обстоятельствах я бы сохранил старое время, а затем сравнил бы, сколько времени прошло с момента последнего вызова, но я делаю это в пуле потоков, который не может влиять на внешние переменные, поэтому я не могу сохранять постоянные изменения в основном потоке. . Единственным недостатком этого метода является то, что отсчет может начинаться откуда угодно, поэтому анимация не всегда будет воспроизводиться с начала диапазона... это можно обойти, указав моему классу спрайтов текущее время до того, как потоки начнут работать, а затем сместить на основе этого , но это не имеет большого значения, поэтому, если это слишком сложно, эту часть можно пропустить.