Частица
Часть раздела Звук и игровые ощущения путешествия по Pygame на Coddy. Урок 8 из 23.
Искры, пыль, дым и конфетти состоят из частиц: множества крошечных объектов, которые разлетаются, недолго существуют и исчезают. Для одной частицы нужно всего несколько чисел: где она находится, насколько перемещается за каждый кадр и сколько кадров ей осталось жить. Их можно хранить в словаре:
{"x": 240, "y": 180, "vx": 2, "vy": -3, "life": 30}vx и vy — это её скорость: 2 пикселя вправо и 3 вверх за каждый кадр. Храни все частицы в одном списке, и каждый кадр перемещай их все и отнимай по одному кадру от времени их жизни:
for p in particles:
p["x"] += p["vx"]
p["y"] += p["vy"]
p["life"] -= 1Пока время жизни каждой частицы больше 0, рисуй её в виде маленького круга:
for p in particles:
if p["life"] > 0:
pygame.draw.circle(screen, (255, 160, 60), (p["x"], p["y"]), 3)У частицы нет изображения и нет класса. Она требует мало ресурсов, поэтому в игре одновременно могут находиться сотни частиц.
Задание
ЛегкоЗаставь серый излучатель посередине выстрелить искрой:
- При нажатии Space добавь
{"x": 240, "y": 180, "vx": 2, "vy": -3, "life": 30}вparticles. - В каждом кадре перемещай каждую частицу на значение её
vxиvy, а еёlifeуменьшай на 1. - Отрисовывай каждую частицу, время жизни которой больше 0, оранжевым кругом
(255, 160, 60)радиусом 3.
Попробуйте сами
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Sparks")
clock = pygame.time.Clock()
particles = []
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((30, 30, 46))
pygame.draw.circle(screen, (120, 120, 140), (240, 180), 8)
pygame.display.flip()
clock.tick(60)
pygame.quit()
Все уроки раздела Звук и игровые ощущения
4Тряска экрана и вспышка при попадании
Тряска экранаВспышка при попаданииОстановка при попаданииСоблюдайте умеренность6Доведём «Звёздный патруль» до блеска
Звуки «Звёздного патруля»Искры при каждом попаданииПотренируйтесь самостоятельно: Песочница Pygame