Menu
CoddyTech

מתודות

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

המספרים של הכוכב נמצאים עכשיו במחלקה, אבל הכללים שלהם — איך הוא נופל ואיך מציירים אותו — עדיין נמצאים בלולאה. פונקציות שנכתבות בתוך מחלקה הן מתודות, והן מציבות את הכללים לצד הנתונים:

class Star:
    # __init__ כמו קודם

    def update(self):
        self.y += self.speed
        if self.y > 480:
            self.y = 0

    def draw(self, screen):
        pygame.draw.circle(screen, (255, 255, 255), (self.x, self.y), 4)

הפרמטר הראשון של כל מתודה הוא self, האובייקט שעליו היא פועלת. קוראים למתודה של אובייקט באמצעות נקודה, ו-Surface של pygame מועבר כמו כל ארגומנט אחר:

star.update()
star.draw(screen)

כעת הלולאה הראשית מתארת את מה שקורה בכל פריים: מעדכנים את הכוכב, ואז מציירים אותו. לאובייקטים של משחק בתוכניות pygame יש כמעט תמיד את שתי המתודות האלה, update ו-draw.

challenge icon

אתגר

בינוני
  1. הוסיפו ל־Star שיטה בשם update(self): היא מוסיפה את self.speed ל־self.y ומחזירה את הכוכב ל־y = 0 ברגע ש־self.y גדול מ־480.
  2. הוסיפו את draw(self, screen): עיגול לבן ברדיוס 4, במיקום (self.x, self.y).
  3. בלולאה, קראו ל־star.update() ואחרי פעולת המילוי קראו ל־star.draw(screen).

נסו בעצמכם

import pygame

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

class Star:
    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.speed = 2


star = Star(320, 0)

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

    star.y += star.speed
    if star.y > 480:
        star.y = 0

    screen.fill((20, 22, 40))
    pygame.draw.circle(screen, (255, 255, 255), (star.x, star.y), 4)
    pygame.display.flip()
    clock.tick(60)

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

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

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

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