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, הוא משתנה מקומי רגיל של המתודה: הוא נעלם כשהמתודה מסתיימת.
אתגר
קל- הוסיפו ל־
__init__פרמטר שלישי,speed, ושמרו אותו בתורself.speed. - החליפו את
starבשני כוכבים:slow = Star(200, 0, 1)ו־fast = Star(440, 0, 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()
כל השיעורים ביחידה ספרייטים ותמונות
5התנגשויות מדויקות ברמת הפיקסל
מלבנים מרגישים לא הוגניםמסכותספרייטים מדויקים ברמת הפיקסלתיבות פגיעה מעגליות3מחלקות לאובייקטים במשחק
המחלקה הראשונה שלךמתודותself הוא האובייקטרשימה של אובייקטיםאובייקטים עם תמונותתת־מחלקהתרגלו בעצמכם: Pygame אונליין