Список объектов
Часть раздела Спрайты и изображения путешествия по Pygame на Coddy. Урок 13 из 36.
Две звезды с заданными именами — это ещё не небо. Для сорока нужна список: создавай объекты в цикле и добавляй каждый из них.
stars = []
for i in range(40):
x = random.randint(0, 639)
y = random.randint(0, 479)
speed = random.randint(1, 3)
stars.append(Star(x, y, speed))Затем один цикл обновляет их все, а другой — рисует:
for star in stars:
star.update()Внутри for переменная star по очереди ссылается на каждый объект, поэтому star.update() перемещает эту звезду с её собственной скоростью. Добавить ещё сотню звёзд — значит изменить одно число; код обновления и рисования остаётся прежним.
Создай список один раз, до игрового цикла. Список, созданный внутри цикла, каждый кадр будет содержать новые звёзды, возвращённые на исходные места, поэтому они никогда не будут двигаться.
Задание
Средне- Добавь
import randomв начало. - Перед циклом создай
stars: список из 40 объектов Star, у каждого из которых случайное значение x от 0 до 639, случайное значение y от 0 до 479 и случайная скорость speed от 1 до 3. - В цикле обновляй каждую звезду в
starsи рисуй каждую звезду после заливки. Удалиslowиfast.
Попробуйте сами
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Falling Stars")
clock = pygame.time.Clock()
class Star:
def __init__(self, x, y, speed):
self.x = x
self.y = y
self.speed = speed
def update(self):
self.y += self.speed
if self.y > 480:
self.y = 0
def draw(self, screen):
pygame.draw.circle(screen, (255, 255, 255), (self.x, self.y), 4)
slow = Star(200, 0, 1)
fast = Star(440, 0, 3)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
slow.update()
fast.update()
screen.fill((20, 22, 40))
slow.draw(screen)
fast.draw(screen)
pygame.display.flip()
clock.tick(60)
pygame.quit()
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Спрайты и изображения
1Загрузка изображений
Загрузить изображениеРазместить его с помощью RectПереместить изображениеЗамостить фонПрозрачные пиксели2Поворот, отражение, масштабирование
Вращение вокруг центраПовернись в направлении полётаИзменение масштаба изображенияВращение от исходного изображения5Пиксельно точные столкновения
Прямоугольники кажутся несправедливымиМаскиПиксельно точные спрайтыКруглые хитбоксы3Классы игровых объектов
Ваш первый классМетодыSelf — это объектСписок объектовОбъекты с изображениямиПодкласс6Анимация с помощью листов спрайтов
Разрезать лист спрайтовСчётчик кадровАнимация по времениОднократная анимация взрываПотренируйтесь самостоятельно: Песочница Pygame