В библиотеке Python Arcade есть все, от простейшей цветной анимации до сложного моделирования частиц.
Анимация играет жизненно важную роль в повышении визуальной привлекательности и вовлеченности видеоигр. Библиотека Arcade — это среда Python для создания 2D-игр. Он предлагает простой и эффективный способ включения анимации в ваши игровые проекты.
Библиотеку Arcade можно использовать для создания базовых анимаций движения и синхронизированных анимаций с игровыми событиями.
Создайте простую игру
Прежде чем начать, убедитесь, что у вас есть pip установлен на вашем устройстве. Используйте эту команду для установки аркадной библиотеки:
пип установить аркада
После этого создайте файл Python с именем простая-game.py и начните с настройки игры, в которой игрок может двигаться влево и вправо.
Код, используемый в этой статье, доступен в этом Репозиторий GitHub и вы можете использовать его бесплатно по лицензии MIT.
Используя библиотеку Arcade, вы можете создать окно, настроить игровую среду и обработать ввод игрока. Вот фрагмент кода для начала:
Импортировать аркада
ЭКРАН_ШИРИНА = 800
ЭКРАН_ВЫСОТА = 600сортМоя игра(аркада. Окно):
деф__в этом__(себя):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "Моя игра")
self.player_x = ШИРИНА_ЭКРАНА // 2
self.player_y = SCREEN_HEIGHT // 2дефon_draw(себя):
аркада.start_render()
col = аркада.цвет. СИНИЙ
arcade.draw_circle_filled (self.player_x, self.player_y, 20, кол)дефon_key_press(я, ключ, модификаторы):
если ключ == аркада.ключ. ЛЕВЫЙ:
self.player_x -= 10
Элиф ключ == аркада.ключ. ВЕРНО:
self.player_x += 10дефосновной():
игра = Моя игра ()
аркада.run()
если __имя__ == "__основной__":
основной()
Добавить базовую анимацию движения
Теперь продвиньте свою игру на шаг вперед и добавьте базовую анимацию движения к объекту игрока. Чтобы оживить игрок в движении, создайте 3 разных круга и последовательно перемещайтесь между ними, когда игрок начинает двигаться. Вот обновленный фрагмент кода для движение-animation.py файл:
сортМоя игра(аркада. Окно):
деф__в этом__(себя):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "Моя игра")
self.player_x = ШИРИНА_ЭКРАНА // 2
self.player_y = SCREEN_HEIGHT // 2
self.frame_counter = 0дефon_draw(себя):
аркада.start_render()
col1 = аркада.цвет. СИНИЙ
col2 = аркада.цвет. ЗЕЛЕНЫЙ
col3 = аркада.цвет. КРАСНЫЙесли self.frame_counter < 10:
arcade.draw_circle_filled (self.player_x, self.player_y, 20, столбец1 )
Элиф self.frame_counter < 20:
arcade.draw_circle_filled (self.player_x, self.player_y, 20, кол2 )
еще:
arcade.draw_circle_filled (self.player_x, self.player_y, 20, столбец3)
дефon_key_press(я, ключ, модификаторы):
если ключ == аркада.ключ. ЛЕВЫЙ:
self.player_x -= 10
self.frame_counter = (self.frame_counter + 1) % 30
Элиф ключ == аркада.ключ. ВЕРНО:
self.player_x += 10
self.frame_counter = (self.frame_counter + 1) % 30
Вот пример выходного кадра:
Управление скоростью и направлением анимации
Для управления скоростью анимации можно ввести систему частоты кадров. Вы также можете изменить порядок кадров в зависимости от направления движения игрока. Когда игрок перемещается слева направо, кадры отображаются в обратном порядке.
Вот измененный фрагмент кода для частота кадров.py файл:
сортМоя игра(аркада. Окно):
деф__в этом__(себя):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "Моя игра")
self.player_x = ШИРИНА_ЭКРАНА // 2
self.player_y = SCREEN_HEIGHT // 2
self.frame_counter = 0
col1 = аркада.цвет. СИНИЙ
col2 = аркада.цвет. ЗЕЛЕНЫЙ
col3 = аркада.цвет. КРАСНЫЙ
self.frames = [столб1, столбец2, столбец3]
self.frame_rate = 10дефon_draw(себя):
аркада.start_render()
frame_index = self.frame_counter // self.frame_rate % len (self.frames)если self.player_x
2:
frame_index = длина (self.frames) - 1 - индекс кадраиндекс = self.frames[frame_index]
arcade.draw_circle_filled (self.player_x, self.player_y, 20, индекс)
дефon_key_press(я, ключ, модификаторы):
если ключ == аркада.ключ. ЛЕВЫЙ:
self.player_x -= 10
self.frame_counter += 1
Элиф ключ == аркада.ключ. ВЕРНО:
self.player_x += 10
self.frame_counter += 1
Используйте оператор модуля % с лен (селф.кадры) обеспечить, чтобы индекс кадра всегда остается в пределах диапазона доступных кадров. Это предотвращает Ошибка индекса от возникновения, когда анимация зацикливается на кадрах.
Настроить частота кадров значение, чтобы контролировать скорость анимации и наслаждаться анимированным движением ваших игровых объектов.
Включая дополнительные функции
Библиотека Arcade предоставляет различные функции для улучшения ваших анимаций.
Эффекты частиц
Вы можете создавать эффекты частиц, такие как взрывы или дым, чтобы добавить реалистичности в свою игру. Создайте файл с именем частица.py и добавьте приведенный ниже код для простой реализации системы частиц с использованием Python и аркадной библиотеки:
Импортировать аркада
Импортировать случайный# Размеры экрана
ЭКРАН_ШИРИНА = 800
ЭКРАН_ВЫСОТА = 600# Цвета
БЕЛЫЙ = (255, 255, 255)# Класс частиц
сортЧастица:
деф__в этом__(я, x, y, dx, dy, радиус, цвет, срок службы):
я.х = х
селф.у = у
селф.дх = дх
селф.ди = ды
self.radius = радиус
self.color = цвет
self.lifespan = продолжительность жизнидефобновлять(себя):
self.x += self.dx
селф.у += селф.ди
self.lifespan -= 1дефрисовать(себя):
arcade.draw_circle_filled (self.x, self.y, self.radius, self.color)# Класс игры
сортМоя игра(аркада. Окно):
деф__в этом__(собственность, ширина, высота):
super().__init__(ширина, высота, «Пример частицы»)
само.частицы = []дефнастраивать(себя):
# Создаем частицы
для _ в диапазон(100):
x = случайный.randrange (SCREEN_WIDTH)
y = random.randrange (SCREEN_HEIGHT)
dx = случайный. униформа (-1, 1)
dy = случайный.униформа(-1, 1)
радиус = случайный. униформа (2, 5)
цвет = аркада.цвет. БЕЛЫЙ
продолжительность жизни = случайный.randint(60, 120)
частица = частица (x, y, dx, dy, радиус, цвет, продолжительность жизни)
self.particles.append (частица)дефon_draw(себя):
аркада.start_render()
для частица в само.частицы:
частица.draw()дефобновлять(я, дельта_время):
для частица в само.частицы:
частица.обновление()если частица.жизнь <= 0:
self.particles.remove (частица)дефосновной():
игра = Моя игра (SCREEN_WIDTH, SCREEN_HEIGHT)
игра.настройка()
аркада.run()
если __имя__ == "__основной__":
основной()
Вы должны увидеть анимацию, в которой задействовано множество движущихся частиц:
Интерактивные анимации
Реализуйте интерактивные анимации, которые реагируют на действия пользователя или игровые события. Например, когда игрок взаимодействует с объектом, он может анимироваться, менять цвет или каким-то образом трансформироваться. Эти интерактивные анимации обеспечивают обратную связь и повышают вовлеченность игрока в игру. Вот код для интерактивная анимация.py файл:
Импортировать аркада
# Размеры экрана
ЭКРАН_ШИРИНА = 800
ЭКРАН_ВЫСОТА = 600# Цвета
БЕЛЫЙ = (255, 255, 255)
КРАСНЫЙ = (255, 0, 0)сортМоя игра(аркада. Окно):
деф__в этом__(собственность, ширина, высота):
super().__init__(ширина, высота, «Интерактивная анимация».)
self.player_x = 400
self.player_y = 300
self.player_radius = 30
self.player_color = КРАСНЫЙ
self.animation_radius = 60
self.animation_color = БЕЛЫЙ
self.animation_active = ЛОЖЬдефon_draw(себя):
аркада.start_render()arcade.draw_circle_filled (self.player_x,
селф.player_y,
self.player_radius,
self.player_color)если self.animation_active:
arcade.draw_circle_filled (self.player_x,
селф.player_y,
self.animation_radius,
self.animation_color)дефon_mouse_press(я, x, y, кнопка, модификаторы):
если (self.player_x - self.player_radius <=
х <= self.player_x + self.player_radius и
self.player_y - self.player_radius <=
у <= self.player_y + self.player_radius
):
self.animation_active = Истинныйдефобновлять(я, дельта_время):
если self.animation_active:
self.animation_radius += 1если self.animation_radius > 100:
self.animation_active = ЛОЖЬ
self.animation_radius = 0дефосновной():
игра = Моя игра (SCREEN_WIDTH, SCREEN_HEIGHT)
аркада.run()
если __имя__ == "__основной__":
основной()
Переопределите необходимые методы, такие как on_draw, on_mouse_press, и обновлять, чтобы обрабатывать отрисовку игрока и анимацию, обрабатывать щелчки мыши и обновлять анимацию.
Чтобы нарисовать игрока, используйте arcade.draw_circle_filled функция, которая принимает (х, у) координаты центра, радиус и цвет в качестве аргументов. Функция draw_circle_filled — одна из Инструменты Arcade, которые вы можете использовать для рисования игровых ресурсов. В этом случае вы можете нарисовать растущий круг, изменяя радиус во времени.
on_mouse_press Метод запускается, когда пользователь щелкает мышью. Он проверяет, находятся ли координаты мыши в пределах границ объекта игрока, и активирует анимацию, если они находятся.
Рекомендации по добавлению анимации
Добавляя анимацию в свои игры, учитывайте следующие рекомендации:
Ограничьте количество анимаций
Наличие большого количества анимаций с большим количеством кадров может повлиять на производительность. Подумайте о том, чтобы свести к минимуму количество необходимых анимаций или кадров, особенно для некритических элементов игры. Упрощение анимации может помочь поддерживать постоянную частоту кадров и оптимизировать использование ресурсов.
Пакетный рендеринг похожих объектов
Сгруппируйте похожие объекты, которые используют одни и те же кадры анимации и текстуры вместе, и визуализируйте их как пакет. Пакетная обработка уменьшает количество вызовов отрисовки, что приводит к повышению производительности. Этот метод особенно полезен при анимации объектов, которые используют один и тот же лист спрайтов или имеют схожие последовательности анимации.
Используйте интерполяцию для плавной анимации
Применяйте методы интерполяции, такие как линейная интерполяция (lerping), для достижения плавных переходов анимации. Интерполяция вычисляет промежуточные значения между ключевыми кадрами анимации для создания плавных движений. Такой подход предотвращает внезапные скачки или резкие движения между кадрами, что приводит к более визуально привлекательной анимации.
Учитывайте скорость и время анимации
Поэкспериментируйте с разной скоростью и временем анимации, чтобы найти правильный баланс для своей игры. Отрегулируйте продолжительность кадра или используйте различные последовательности анимации, чтобы создать вариации скорости, ускорения или замедления. Эти настройки могут добавить глубину и характер анимации вашей игры.
Тестируйте и оптимизируйте
Регулярно тестируйте свои анимации на разных устройствах и следите за производительностью. Ищите потенциальные узкие места или замедления и соответствующим образом оптимизируйте. Этот процесс помогает обеспечить плавную и последовательную анимацию на самых разных устройствах.
Сделайте игры более увлекательными с помощью анимации
Добавление анимации в ваши игры может значительно повысить вовлеченность и погружение игроков. Анимации обеспечивают визуальную обратную связь с действиями игрока, делая игровой процесс более интуитивным и приятным. Они оживляют игровые миры, создавая ощущение реализма и азарта.
Будь то бег персонажа, взрыв объекта или простой эффект перехода, анимация способствует более динамичному и увлекательному игровому процессу.