קבוצות
חלק מהיחידה ספרייטים ותמונות במסלול ה-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:. ציירו את הקבוצה אחרי המילוי, כמו כל תמונה אחרת.
אתגר
בינוני- החליפו את
enemyבקבוצה בשםenemiesשמכילה חמש ספרייטים מסוג Enemy, ממורכזים ב־x = 64, 192, 320, 448 ו־576, כולם ב־y = 60. - קראו ל־
enemies.update()בכל פריים. - ציירו אותם באמצעות
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()
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה ספרייטים ותמונות
5התנגשויות מדויקות ברמת הפיקסל
מלבנים מרגישים לא הוגניםמסכותספרייטים מדויקים ברמת הפיקסלתיבות פגיעה מעגליות3מחלקות לאובייקטים במשחק
המחלקה הראשונה שלךמתודותself הוא האובייקטרשימה של אובייקטיםאובייקטים עם תמונותתת־מחלקהתרגלו בעצמכם: Pygame אונליין