ריצוף רקע
חלק מהיחידה ספרייטים ותמונות במסלול ה-Pygame של Coddy. שיעור 4 מתוך 36.
שמיים בצבע אחיד נראים משעממים. assets/backgrounds/sky.png היא תמונה בגודל 72 על 72 פיקסלים, שנועדה לחזרה: מציבים עותקים זה לצד זה, והשוליים מתחברים ללא תפר. כיסוי החלון בעותקים של תמונה קטנה אחת נקרא ריצוף.
שתי לולאות נותנות כל פינה שמאלית עליונה, שורה אחת של הרשת בכל פעם:
for x in range(0, 640, 72):
for y in range(0, 480, 72):
screen.blit(tile, (x, y))range(0, 640, 72) היא 0, 72, 144 וכן הלאה עד 576. העותק שמתחיל ב-576 מגיע עד 648, מעבר לקצה: pygame מצייר את החלק שבתוך החלון ומדלג על השאר, כך שהעמודה האחרונה נחתכת בצורה נקייה.
האריחים מכסים את כל החלון, ולכן הם מחליפים את screen.fill: מציירים אותם קודם, ואז את כל השאר מעליהם. בתמונה הזו אין פיקסלים שקופים, לכן טוענים אותה בעזרת .convert(), הגרסה של convert_alpha() לתמונות אטומות.
אתגר
קל- אחרי
set_mode, טען אתassets/backgrounds/sky.pngבאמצעות.convert()לתוך משתנה בשםtile. - החלף את
screen.fill(...)בשתי הלולאות שמציירות אתtileבכל נקודה של(x, y), כאשר x נמצא בטווחrange(0, 640, 72)ו-y בטווחrange(0, 480, 72). - המשך לצייר את החללית אחרי האריחים.
נסו בעצמכם
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Sky Tiles")
clock = pygame.time.Clock()
ship = pygame.image.load("assets/images/ship.png").convert_alpha()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((20, 22, 40))
screen.blit(ship, (288, 360))
pygame.display.flip()
clock.tick(60)
pygame.quit()
כל השיעורים ביחידה ספרייטים ותמונות
5התנגשויות מדויקות ברמת הפיקסל
מלבנים מרגישים לא הוגניםמסכותספרייטים מדויקים ברמת הפיקסלתיבות פגיעה מעגליות3מחלקות לאובייקטים במשחק
המחלקה הראשונה שלךמתודותself הוא האובייקטרשימה של אובייקטיםאובייקטים עם תמונותתת־מחלקהתרגלו בעצמכם: Pygame אונליין