אובייקטים עם תמונות
חלק מהיחידה ספרייטים ותמונות במסלול ה-Pygame של Coddy. שיעור 14 מתוך 36.
האויבים הם תמונות שנעות על גבי Rects, וקוד ההתחלה שומר שלושה Rects ומבצע שלוש פעולות blit ידנית. מחלקה יכולה להכיל תמונה ואת ה־Rect שלה יחד:
class Enemy:
def __init__(self, image, x, y):
self.image = image
self.rect = image.get_rect(center=(x, y))
self.speed = 2
def update(self):
self.rect.y += self.speed
if self.rect.top > 480:
self.rect.bottom = 0
def draw(self, screen):
screen.blit(self.image, self.rect)התמונה מועברת פנימה, ולא נטענת בתוך __init__. טענו כל קובץ פעם אחת בחלק העליון, והעבירו את אותו Surface לכל אויב שמשתמש בו: עשרה אויבים אדומים חולקים תמונה אדומה אחת. עם זאת, לכל אויב יש Rect משלו, כך שכל אחד נע בפני עצמו.
הזזת האויב פירושה הזזת ה־Rect שלו, וציורו פירושו ביצוע blit של התמונה שלו במיקום ה־Rect: אלה שני המאפיינים שיש לכל אובייקט משחק ביחידה הזאת.
אתגר
בינוני- כתבו את המחלקה
Enemyעם__init__(self, image, x, y),update(self)ו־draw(self, screen), כמו למעלה: ה־Rect ממורכז ב־(x, y), נע למטה 2 פיקסלים בכל פריים, וחוזר למעלה מעל הקצה העליון ברגע שהוא נמצא מתחת לחלון. - צרו את
enemies, רשימה של שלושה אויבים: האדום ממורכז ב־(160, 100), הירוק ב־(320, 100), והצהוב ב־(480, 100). - עדכנו וציירו כל אויב ברשימה; הסירו את שלושת ה־Rect.
נסו בעצמכם
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Enemy Rain")
clock = pygame.time.Clock()
red = pygame.image.load("assets/images/enemy_red.png").convert_alpha()
green = pygame.image.load("assets/images/enemy_green.png").convert_alpha()
yellow = pygame.image.load("assets/images/enemy_yellow.png").convert_alpha()
red_rect = red.get_rect(center=(160, 100))
green_rect = green.get_rect(center=(320, 100))
yellow_rect = yellow.get_rect(center=(480, 100))
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
for rect in (red_rect, green_rect, yellow_rect):
rect.y += 2
if rect.top > 480:
rect.bottom = 0
screen.fill((20, 22, 40))
screen.blit(red, red_rect)
screen.blit(green, green_rect)
screen.blit(yellow, yellow_rect)
pygame.display.flip()
clock.tick(60)
pygame.quit()
כל השיעורים ביחידה ספרייטים ותמונות
5התנגשויות מדויקות ברמת הפיקסל
מלבנים מרגישים לא הוגניםמסכותספרייטים מדויקים ברמת הפיקסלתיבות פגיעה מעגליות3מחלקות לאובייקטים במשחק
המחלקה הראשונה שלךמתודותself הוא האובייקטרשימה של אובייקטיםאובייקטים עם תמונותתת־מחלקהתרגלו בעצמכם: Pygame אונליין