Menu
CoddyTech

קבוצות

חלק מהיחידה ספרייטים ותמונות במסלול ה-Pygame של Coddy. שיעור 17 מתוך 36.

ספרייטים מופיעים בהמונים: אויבים, לייזרים, מטבעות. קבוצה מכילה ספרייטים רבים ומבצעת את אותה הפעולה על כולם:

enemies = pygame.sprite.Group()
for i in range(5):
    enemies.add(Enemy(64 + i * 128, 60))

שתי קריאות בתוך הלולאה מחליפות את הלולאות שכתבת על רשימה:

enemies.update()
enemies.draw(screen)

enemies.update() קוראת ל-update() עבור כל ספרייט בקבוצה. enemies.draw(screen) מציירת כל ספרייט באמצעות blit של self.image שלו במיקום של self.rect שלו: לכן שני השמות האלה חייבים להיות מדויקים. ספרייט בקבוצה לא זקוק לשיטת ציור משלו.

הקבוצה גם יודעת מה גודלה, len(enemies), ואפשר לעבור עליה בלולאה באמצעות for enemy in enemies:. ציירו את הקבוצה אחרי המילוי, כמו כל תמונה אחרת.

challenge icon

אתגר

בינוני
  1. החליפו את enemy בקבוצה בשם enemies שמכילה חמש ספרייטים מסוג Enemy, ממורכזים ב־x = 64, 192, 320, 448 ו־576, כולם ב־y = 60.
  2. קראו ל־enemies.update() בכל פריים.
  3. ציירו אותם באמצעות enemies.draw(screen), אחרי המילוי.

נסו בעצמכם

import pygame

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Enemy Group")
clock = pygame.time.Clock()

ship_image = pygame.image.load("assets/images/ship.png").convert_alpha()
enemy_image = pygame.image.load("assets/images/enemy_red.png").convert_alpha()


class Player(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = ship_image
        self.rect = self.image.get_rect(midbottom=(320, 470))

    def update(self):
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT]:
            self.rect.x -= 6
        if keys[pygame.K_RIGHT]:
            self.rect.x += 6
        self.rect.clamp_ip(screen.get_rect())


class Enemy(pygame.sprite.Sprite):
    def __init__(self, x, y):
        super().__init__()
        self.image = enemy_image
        self.rect = self.image.get_rect(center=(x, y))

    def update(self):
        self.rect.y += 3
        if self.rect.top > 480:
            self.rect.bottom = 0


player = Player()
enemy = Enemy(320, 60)

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    player.update()
    enemy.update()

    screen.fill((20, 22, 40))
    screen.blit(enemy.image, enemy.rect)
    screen.blit(player.image, player.rect)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה ספרייטים ותמונות

תרגלו בעצמכם: Pygame אונליין