Можете да оживите най-простите игри с анимирани частици. Симулирайте движение, експлозии и други с помощта на тези техники.

Pygame е популярна библиотека за разработване на игри с помощта на Python. Докато създавате игри, добавянето на специални ефекти може значително да подобри визуалната привлекателност и цялостното изживяване за играчите.

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

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

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

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

Вътре в основния цикъл на играта, обработвайте потребителски събития и актуализирайте позицията на играча въз основа на натискане на клавиши.

instagram viewer
Начертайте правоъгълник за обекта на играча, който използва pygame.draw.rect().

Накрая актуализирайте прозореца на играта, като използвате pygame.display.flip() и излезте от играта, когато играчът излезе от цикъла. Тази проста игра ще служи като основа за добавяне на специални ефекти с помощта на системи от частици.

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

Създаване на различни типове частици

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

Ефект на частици, когато играчът се движи

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

Определете а частица клас, който представлява отделна частица. Всяка частица има начална позиция (х и г), произволна скорост (dx и dy) и живот, който определя колко дълго ще съществува частицата.

Също така, дефинирайте a ParticleSystem клас, който управлява колекция от частици. Можете да добавите нова частица към системата, като използвате add_particle() метод. The актуализация() методът актуализира всички частици в системата и премахва частиците, които са достигнали края на живота си.

# Клас на частиците
класчастица:
деф__в него__(себе си, x, y):
себе си.x = x
self.y = y
self.dx = random.uniform(-1, 1)
self.dy = random.uniform(-1, 1)
self.lifetime = 60

дефактуализация(себе си):
self.x += self.dx
self.y += self.dy
self.lifetime -= 1

дефрисувам(аз, прозорец):
цвят = (200, 200, 200)
позиция = (int (self.x), int (self.y))
pygame.draw.circle (прозорец, цвят, позиция, 2)

# Клас на система от частици
класParticleSystem:
деф__в него__(себе си):
self.particles = []

дефдобавяне на частица(себе си, x, y):
self.particles.append (Частица (x, y))

дефактуализация(себе си):
за частица в self.particles:
particle.update()

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

дефрисувам(аз, прозорец):
за частица в self.particles:
particle.draw (прозорец)

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

# Създайте система от частици
particle_system = ParticleSystem()

# Основен цикъл на играта
бягане = Вярно
часовник = pygame.time. Часовник()

докато работи:
dt = clock.tick(60) / 1000.0

за събитие в pygame.event.get():
ако event.type == pygame. ИЗХОД:
бягане = Невярно

particle_y = player_y + player_height // 2
particle_x = player_x + player_width

ключове = pygame.key.get_pressed()
граница = player_x < window_width - player_width

ако ключове [pygame. K_LEFT] и player_x > 0:
player_x -= 5
particle_system.add_particle (particle_x, particle_y)

ако ключове [pygame. K_RIGHT] и граница:
player_x += 5
particle_system.add_particle (player_x, particle_y)

particle_system.update()

window.fill (ЧЕРНО)
player_pos = (player_x, player_y, player_width, player_height)
pygame.draw.rect (прозорец, БЯЛ, player_pos)
particle_system.draw (прозорец)

pygame.display.flip()

# Излезте от играта
pygame.quit()

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

Взривен ефект

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

Определете а частица клас, подобен на предишния, но този път включва a цвят параметър за представяне на цвета на частицата.

Освен това актуализирайте ParticleSystem клас за обработка на новия тип частица. The add_particle() методът вече изисква допълнителен цвят параметър и създава частици с посочения цвят.

# Клас на частиците
класчастица:
деф__в него__(себе си, x, y, цвят):
себе си.x = x
self.y = y
self.dx = random.uniform(-2, 2)
self.dy = random.uniform(-2, 2)
self.lifetime = 30
self.color = цвят

дефактуализация(себе си):
self.x += self.dx
self.y += self.dy
self.lifetime -= 1

дефрисувам(аз, прозорец):
позиция = (int (self.x), int (self.y))
pygame.draw.circle (прозорец, self.color, позиция, 3)

# Клас на система от частици
класParticleSystem:
деф__в него__(себе си):
self.particles = []

дефдобавяне на частица(себе си, x, y, цвят):
self.particles.append (Частица (x, y, цвят)

дефактуализация(себе си):
за частица в self.particles:
particle.update()

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

дефрисувам(аз, прозорец):
за частица в self.particles:
particle.draw (прозорец)

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

# Създайте система от частици
particle_system = ParticleSystem()

# Основен цикъл на играта
бягане = Вярно
часовник = pygame.time. Часовник()

докато работи:
dt = clock.tick(60) / 1000.0

за събитие в pygame.event.get():
ако event.type == pygame. ИЗХОД:
бягане = Невярно

ключове = pygame.key.get_pressed()
граница = player_x < window_width - player_width

ако ключове [pygame. K_LEFT] и player_x > 0:
player_x -= 5

ако ключове [pygame. K_RIGHT] и граница:
player_x += 5

ако ключове [pygame. K_SPACE]:
bullet_x = player_x + player_width // 2
bullet_y = играч_y
particle_system.add_particle (bullet_x, bullet_y, ЧЕРВЕНО)

particle_system.update()

window.fill (ЧЕРНО)
player_pos = (player_x, player_y, player_width, player_height)
pygame.draw.rect (прозорец, БЯЛ, player_pos)
particle_system.draw (прозорец)

pygame.display.flip()

# Излезте от играта
pygame.quit()

Ето резултата:

Когато интервалът ( pygame. K_SPACE) е натиснат, добавете частица към системата от частици в позицията на куршума. Това създава ефекта на взрива с червени частици.

Ефект прах

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

Актуализирайте частица клас за включване на an ъгъл и скорост за всяка частица. Ъгълът определя посоката на движение, а скоростта контролира колко бързо се движат частиците в техния кръгов модел. Променете актуализация() метод за актуализиране на позицията на всяка частица въз основа на нейния ъгъл и скорост.

Освен това актуализирайте ParticleSystem клас, за да се справи с новото поведение на частиците. Сега частиците се движат в кръг в прозореца на играта.

# Клас на частиците
класчастица:
деф__в него__(собствен, x, y, радиус):
себе си.x = x
self.y = y
self.radius = радиус
self.angle = random.uniform(0, 2 * math.pi)
self.speed = random.uniform(0.5, 1.5)

дефактуализация(себе си):
себе си.ъгъл += 0.02
self.x += math.cos (self.angle) * self.speed
self.y += math.sin (self.angle) * self.speed

ако себе си.x < 0:
self.x = window_width
елиф self.x > window_width:
себе си.x = 0

ако self.y < 0:
self.y = window_height
елиф self.y > window_height:
self.y = 0

дефрисувам(аз, прозорец):
цвят = (128, 128, 128)
pos = (int (self.x), int (self.y))
радиус = int (self.radius)
pygame.draw.circle (прозорец, цвят, позиция, радиус)

# Клас на система от частици
класParticleSystem:
деф__в него__(себе си):
self.particles = []

дефдобавяне на частица(собствен, x, y, радиус):
self.particles.append (Частица (x, y, радиус))

дефактуализация(себе си):
за частица в self.particles:
particle.update()

дефрисувам(аз, прозорец):
за частица в self.particles:
particle.draw (прозорец)

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

# Създайте система от частици за ефект на прах
particle_system = ParticleSystem()

# Основен цикъл на играта
бягане = Вярно
часовник = pygame.time. Часовник()

докато работи:
dt = clock.tick(60) / 1000.0

за събитие в pygame.event.get():
ако event.type == pygame. ИЗХОД:
бягане = Невярно

particle_x = random.randint(0, широчина_на_прозореца)
particle_y = random.randint(0, височина_на_прозореца)

particle_system.add_particle (particle_x, particle_y, 1)

particle_system.update()

window.fill((0, 0, 0))
particle_system.draw (прозорец)

pygame.display.flip()

# Излезте от играта
pygame.quit()

Добавете частици на случаен принцип в прозореца на играта, като използвате random.randint() функция. Всяка частица има начален радиус от 1. Актуализирайте и начертайте системата от частици в прозореца на играта, създавайки динамичен и прашен фонов ефект.

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

Най-добри практики за специални ефекти

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

Оптимизация на производителността

Системите от частици могат да включват голям брой частици, което може да повлияе на производителността на играта. Приложете техники като пространствено разделяне (напр. Quadtree), за да оптимизирате актуализациите и чертането на частици.

Рециклиране на частици

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

Обединяване на частици

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

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

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

Визуална последователност

Поддържайте постоянен визуален стил в цялата си игра, включително ефекти на частици. Уверете се, че цветовете, размерите и моделите на движение на частиците са съгласувани с цялостната тема и художествен стил.

Звукови ефекти

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

Направете игрите по-забавни със специални ефекти

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

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