Статья Автор: Омарбек Нұр-Мұхаммед

Примеры 2

Код

from random import randint
import sys
import pygame
pygame.init()

SIZE = WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode(SIZE)
clock = pygame.time.Clock()


class Letter(pygame.sprite.Sprite):
    def __init__(self, x, y, speed, path):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load(path)
        self.image = pygame.transform.scale(self.image, (64, 64))
        self.rect = self.image.get_rect(center=(x, y))
        self.speed = speed

    def update(self):
        if self.rect.y < HEIGHT:
            self.rect.y += self.speed
        else:
            self.rect.y = -64


l1 = Letter(randint(0, WIDTH - 64), 32, randint(1, 5), "images/assets_letterTiles/PNG/Blue/letter_A.png")
l2 = Letter(randint(0, WIDTH - 64), 32, randint(1, 5), "images/assets_letterTiles/PNG/Blue/letter_B.png")
l3 = Letter(randint(0, WIDTH - 64), 32, randint(1, 5), "images/assets_letterTiles/PNG/Blue/letter_C.png")

while 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    l1.update()
    l2.update()
    l3.update()

    screen.fill((0, 0, 0))
    screen.blit(l1.image, l1.rect)
    screen.blit(l2.image, l2.rect)
    screen.blit(l3.image, l3.rect)
    pygame.display.update()

    clock.tick(30)

6. Создание группы:

Все созданные спрайты одинаковы, поэтому есть смысл объединить их в группу и сократить повторяющийся код.

letters = pygame.sprite.Group()

 

7. Добавление спрайтов в группу:

letters.add(
    Letter(randint(0, WIDTH - 64), 32, randint(1, 5), "images/assets_letterTiles/PNG/Blue/letter_A.png"),
    Letter(randint(0, WIDTH - 64), 32, randint(1, 5), "images/assets_letterTiles/PNG/Blue/letter_B.png"),
    Letter(randint(0, WIDTH - 64), 32, randint(1, 5), "images/assets_letterTiles/PNG/Blue/letter_C.png")
)

 

8. Отображение спрайтов:

Было Стало
screen.fill((0, 0, 0))

screen.blit(l1.image, l1.rect)
screen.blit(l2.image, l2.rect)
screen.blit(l3.image, l3.rect)

pygame.display.update()
screen.fill((0, 0, 0))

letters.draw(screen)

pygame.display.update()

 

9. Анимация спрайтов:

Было Стало
while 1:
    ...

    l1.update()
    l2.update()
    l3.update()

    ...

    clock.tick(30)
while 1:
    ...

    letters.update()

    ...

    clock.tick(30)

Код

from random import randint
import sys
import pygame
pygame.init()

SIZE = WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode(SIZE)
clock = pygame.time.Clock()


class Letter(pygame.sprite.Sprite):
    def __init__(self, x, y, speed, path):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load(path)
        self.image = pygame.transform.scale(self.image, (64, 64))
        self.rect = self.image.get_rect(center=(x, y))
        self.speed = speed

    def update(self):
        if self.rect.y < HEIGHT:
            self.rect.y += self.speed
        else:
            self.rect.y = -64


letters = pygame.sprite.Group()

letters.add(
    Letter(randint(0, WIDTH - 64), 32, randint(1, 5), "images/assets_letterTiles/PNG/Blue/letter_A.png"),
    Letter(randint(0, WIDTH - 64), 32, randint(1, 5), "images/assets_letterTiles/PNG/Blue/letter_B.png"),
    Letter(randint(0, WIDTH - 64), 32, randint(1, 5), "images/assets_letterTiles/PNG/Blue/letter_C.png")
)

while 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    letters.update()

    screen.fill((0, 0, 0))
    letters.draw(screen)
    pygame.display.update()

    clock.tick(30)
Пропустить Навигационные Ссылки.
Чтобы оставить комментарий нужна авторизация
Печать