מתודות
חלק מהיחידה ספרייטים ותמונות במסלול ה-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.
אתגר
בינוני- הוסיפו ל־
Starשיטה בשםupdate(self): היא מוסיפה אתself.speedל־self.yומחזירה את הכוכב ל־y = 0ברגע ש־self.yגדול מ־480. - הוסיפו את
draw(self, screen): עיגול לבן ברדיוס 4, במיקום(self.x, self.y). - בלולאה, קראו ל־
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()
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה ספרייטים ותמונות
5התנגשויות מדויקות ברמת הפיקסל
מלבנים מרגישים לא הוגניםמסכותספרייטים מדויקים ברמת הפיקסלתיבות פגיעה מעגליות3מחלקות לאובייקטים במשחק
המחלקה הראשונה שלךמתודותself הוא האובייקטרשימה של אובייקטיםאובייקטים עם תמונותתת־מחלקהתרגלו בעצמכם: Pygame אונליין