Библиотеката Arcade на Python ви покрива, от най-простите цветни анимации до сложно моделиране на частици.

Анимацията играе жизненоважна роля за подобряване на визуалната привлекателност и ангажираност на видеоигрите. Библиотеката Arcade е рамка на Python за създаване на 2D игри. Той предлага лесен и ефективен начин за включване на анимации във вашите проекти за игри.

Можете да използвате библиотеката Arcade, за да създавате основни анимации за движение и синхронизирани анимации със събития в играта.

Създайте проста игра

Преди да започнете, уверете се, че имате pip, инсталиран на вашето устройство. Използвайте тази команда, за да инсталирате аркадната библиотека:

pip инсталирайте аркада

След това създайте файл на Python с име проста-игра.py и започнете, като настроите игра, в която играчът може да се движи наляво и надясно.

Кодът, използван в тази статия, е достъпен в това GitHub хранилище и е безплатен за използване под лиценза на MIT.

С помощта на библиотеката Arcade можете да създадете прозорец, да настроите игровата среда и да управлявате въвеждането на играча. Ето един кодов фрагмент, за да започнете:

instagram viewer

импортиране аркада

SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

класMyGame(аркадна. прозорец):
деф__в него__(себе си):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "Моята игра")
self.player_x = SCREEN_WIDTH // 2
self.player_y = SCREEN_HEIGHT // 2

дефon_draw(себе си):
arcade.start_render()
col = arcade.color. СИН
arcade.draw_circle_filled (self.player_x, self.player_y, 20, col)

дефon_key_press(самостоятелно, ключ, модификатори):
ако ключ == arcade.key. НАЛЯВО:
self.player_x -= 10
елиф ключ == arcade.key. ДЯСНО:
self.player_x += 10

дефосновен():
игра = MyGame()
arcade.run()

ако __име__ == "__основен__":
основен ()

Добавяне на основна анимация на движение

Сега направете играта си крачка напред и добавете основна анимация на движение към обекта на играча. За анимиране на играч на движение, създайте 3 различни кръга и итерирайте между тях последователно, когато играчът започне да се движи. Ето актуализирания кодов фрагмент за движение-анимация.py файл:

класMyGame(аркадна. прозорец):
деф__в него__(себе си):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "Моята игра")
self.player_x = SCREEN_WIDTH // 2
self.player_y = SCREEN_HEIGHT // 2
self.frame_counter = 0

дефon_draw(себе си):
arcade.start_render()
col1 = arcade.color. СИН
col2 = arcade.color. ЗЕЛЕНО
col3 = arcade.color. ЧЕРВЕН

ако self.frame_counter < 10:
arcade.draw_circle_filled (self.player_x, self.player_y, 20,col1 )
елиф self.frame_counter < 20:
arcade.draw_circle_filled (self.player_x, self.player_y, 20,col2 )
друго:
arcade.draw_circle_filled (self.player_x, self.player_y, 20, col3)

дефon_key_press(самостоятелно, ключ, модификатори):
ако ключ == arcade.key. НАЛЯВО:
self.player_x -= 10
self.frame_counter = (self.frame_counter + 1) % 30
елиф ключ == arcade.key. ДЯСНО:
self.player_x += 10
self.frame_counter = (self.frame_counter + 1) % 30

Ето примерен изходен кадър:

Контролиране на скоростта и посоката на анимацията

За да контролирате скоростта на анимацията, можете да въведете система за честота на кадрите. Можете също така да промените реда на кадрите в зависимост от посоката на движение на играча. Когато играчът се движи отляво надясно, кадрите ще се показват в обратен ред.

Ето модифицирания кодов фрагмент за frame-rate.py файл:

класMyGame(аркадна. прозорец):
деф__в него__(себе си):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "Моята игра")
self.player_x = SCREEN_WIDTH // 2
self.player_y = SCREEN_HEIGHT // 2
self.frame_counter = 0
col1 = arcade.color. СИН
col2 = arcade.color. ЗЕЛЕНО
col3 = arcade.color. ЧЕРВЕН
self.frames = [col1, col2, col3]
self.frame_rate = 10

дефon_draw(себе си):
arcade.start_render()
frame_index = self.frame_counter // self.frame_rate % len (self.frames)

ако self.player_x < SCREEN_WIDTH // 2:
frame_index = len (self.frames) - 1 - frame_index

индекс = self.frames[frame_index]
arcade.draw_circle_filled (self.player_x, self.player_y, 20, индекс)

дефon_key_press(самостоятелно, ключ, модификатори):
ако ключ == arcade.key. НАЛЯВО:
self.player_x -= 10
self.frame_counter += 1
елиф ключ == arcade.key. ДЯСНО:
self.player_x += 10
self.frame_counter += 1

Използвайте оператора на модула % с len (самостоятелни рамки) за да се гарантира, че frame_index винаги остава в обхвата на наличните кадри. Това предотвратява IndexError от възникване, когато анимацията преминава през кадрите.

Регулирайте frame_rate стойност, за да контролирате скоростта на анимацията и да се насладите на анимираното движение на вашите обекти в играта.

Включително допълнителни функции

Библиотеката Arcade предоставя различни функции за подобряване на вашите анимации.

Ефекти на частиците

Можете да създадете ефекти на частици, като експлозии или дим, за да добавите реализъм към играта си. Създайте файл с име particle.py и добавете кода по-долу за проста реализация на система от частици, използвайки Python и аркадната библиотека:

импортиране аркада
импортиране случаен

# Размери на екрана
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

# Цветове
БЯЛО = (255, 255, 255)

# Клас на частиците
класчастица:
деф__в него__(собствен, x, y, dx, dy, радиус, цвят, продължителност на живота):
себе си.x = x
self.y = y
self.dx = dx
self.dy = dy
self.radius = радиус
self.color = цвят
self.lifespan = продължителност на живота

дефактуализация(себе си):
self.x += self.dx
self.y += self.dy
самостоятелен.продължителност на живота -= 1

дефрисувам(себе си):
arcade.draw_circle_filled (self.x, self.y, self.radius, self.color)

# Игра клас
класMyGame(аркадна. прозорец):
деф__в него__(аз, ширина, височина):
super().__init__(ширина, височина, "Пример за частици")
self.particles = []

дефнастройвам(себе си):
# Създавайте частици
за _ в диапазон (100):
x = random.randrange (SCREEN_WIDTH)
y = random.randrange (SCREEN_HEIGHT)
dx = random.uniform(-1, 1)
dy = random.uniform(-1, 1)
радиус = random.uniform(2, 5)
цвят = arcade.color. БЯЛ
живот = random.randint(60, 120)
particle = Частица (x, y, dx, dy, радиус, цвят, продължителност на живота)
self.particles.append (частица)

дефon_draw(себе си):
arcade.start_render()
за частица в self.particles:
particle.draw()

дефактуализация(самостоятелно, делта_време):
за частица в self.particles:
particle.update()

ако particle.lifespan <= 0:
self.particles.remove (частица)

дефосновен():
игра = MyGame (SCREEN_WIDTH, SCREEN_HEIGHT)
game.setup()
arcade.run()

ако __име__ == "__основен__":
основен ()

Трябва да видите анимация, която включва много движещи се частици:

Интерактивни анимации

Внедряване на интерактивни анимации, които отговарят на въвеждане от потребителя или събития в играта. Например, когато играчът взаимодейства с обект, той може да анимира, промени цвета или да се трансформира по някакъв начин. Тези интерактивни анимации осигуряват обратна връзка и подобряват ангажираността на играча с играта. Ето кода за interactive-animation.py файл:

импортиране аркада

# Размери на екрана
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

# Цветове
БЯЛО = (255, 255, 255)
ЧЕРВЕНО = (255, 0, 0)

класMyGame(аркадна. прозорец):
деф__в него__(аз, ширина, височина):
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(себе си):
arcade.start_render()

arcade.draw_circle_filled (self.player_x,
self.player_y,
self.player_radius,
self.player_color)

ако self.animation_active:
arcade.draw_circle_filled (self.player_x,
self.player_y,
self.animation_radius,
self.animation_color)

дефon_mouse_press(self, x, y, бутон, модификатори):
ако (self.player_x - self.player_radius <=
x <= self.player_x + self.player_radius и
self.player_y - self.player_radius <=
y <= 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

дефосновен():
игра = MyGame (SCREEN_WIDTH, SCREEN_HEIGHT)
arcade.run()

ако __име__ == "__основен__":
основен ()

Заменете необходимите методи, като напр on_draw, on_mouse_press, и актуализация, за обработка на изчертаването на плейъра и анимацията, обработка на щракванията на мишката и актуализиране на анимацията.

За да нарисувате играча, използвайте arcade.draw_circle_filled функция, която приема (x, y) координатите на центъра, радиуса и цвета като аргументи. Функцията draw_circle_filled е една от Инструментите на Arcade, които можете да използвате, за да рисувате игрови активи. В този случай можете да начертаете нарастващ кръг, като променяте радиуса във времето.

The on_mouse_press методът се изпълнява, когато потребителят щракне с мишката. Той проверява дали координатите на мишката са в границите на обекта на играча и активира анимацията, ако са.

Най-добри практики за добавяне на анимация

Когато добавяте анимация към вашите игри, вземете предвид следните най-добри практики:

Ограничете броя на анимациите

Наличието на много анимации с много кадри може да повлияе на производителността. Помислете за минимизиране на броя на необходимите анимации или кадри, особено за некритични елементи в играта. Опростяването на анимациите може да помогне за поддържане на постоянна честота на кадрите и оптимизиране на използването на ресурсите.

Пакетно изобразяване на подобни обекти

Групирайте подобни обекти, които споделят едни и същи анимационни рамки и текстури, и ги изобразете като пакет. Пакетирането намалява броя на повикванията за теглене, което води до подобрена производителност. Тази техника е особено полезна при анимиране на обекти, които използват един и същ лист спрайтове или имат подобни анимационни последователности.

Използвайте интерполация за плавна анимация

Прилагайте техники за интерполация, като линейна интерполация (lerping), за да постигнете плавни преходи на анимация. Интерполацията изчислява междинните стойности между ключовите кадри на анимацията, за да създаде плавни движения. Този подход предотвратява внезапни скокове или резки движения между кадрите, което води до по-привлекателни визуално анимации.

Помислете за скоростта и времето на анимацията

Експериментирайте с различни скорости на анимация и време, за да намерите правилния баланс за вашата игра. Регулирайте продължителността на кадъра или използвайте различни анимационни последователности, за да създадете вариации в скоростта, ускорението или забавянето. Тези корекции могат да добавят дълбочина и характер към анимациите на вашата игра.

Тествайте и оптимизирайте

Редовно тествайте вашите анимации на различни устройства и наблюдавайте ефективността. Потърсете потенциални тесни места или забавяния и оптимизирайте съответно. Този процес помага да се гарантира плавно и последователно изживяване с анимация в широк набор от устройства.

Направете игрите по-ангажиращи с анимация

Добавянето на анимации към вашите игри може значително да подобри ангажираността и потапянето на играча. Анимациите осигуряват визуална обратна връзка за действията на играча, което прави играта по-интуитивна и приятна. Те вдъхват живот на игровите светове, създавайки усещане за реализъм и вълнение.

Независимо дали става въпрос за бягащ герой, експлодиращ обект или прост ефект на преход, анимациите допринасят за по-динамично и завладяващо игрово изживяване.