Menu
CoddyTech

self הוא האובייקט

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

מחלקה אחת יכולה ליצור כמה אובייקטים שתרצו, ולכל אחד מהם יש מאפיינים משלו. הוסיפו ל-__init__ פרמטר מהירות, ושני כוכבים יוכלו ליפול במהירויות שונות:

slow = Star(200, 0, 1)
fast = Star(440, 0, 3)

כשכותבים slow.update(), Python מריצה את Star.update(slow): self הוא slow, ולכן self.y += self.speed מזיז את slow ב-1. fast.update() מריצה את אותן שורות כאשר self מוגדר ל-fast, ומזיזה אותו ב-3. מתודה אחת, שני אובייקטים, ואף אחד מהם לא נוגע במספרים של האחר.

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

challenge icon

אתגר

קל
  1. הוסיפו ל־__init__ פרמטר שלישי, speed, ושמרו אותו בתור self.speed.
  2. החליפו את star בשני כוכבים: slow = Star(200, 0, 1) ו־fast = Star(440, 0, 3).
  3. עדכנו וציירו את שני הכוכבים בכל פריים.

נסו בעצמכם

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

    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)


star = Star(320, 0)

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

    star.update()

    screen.fill((20, 22, 40))
    star.draw(screen)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

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

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