Menu
CoddyTech

ריצוף רקע

חלק מהיחידה ספרייטים ותמונות במסלול ה-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() לתמונות אטומות.

challenge icon

אתגר

קל
  1. אחרי set_mode, טען את assets/backgrounds/sky.png באמצעות .convert() לתוך משתנה בשם tile.
  2. החלף את screen.fill(...) בשתי הלולאות שמציירות את tile בכל נקודה של (x, y), כאשר x נמצא בטווח range(0, 640, 72) ו-y בטווח range(0, 480, 72).
  3. המשך לצייר את החללית אחרי האריחים.

נסו בעצמכם

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()

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

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