סיבוב מהמקור
חלק מהיחידה ספרייטים ותמונות במסלול ה-Pygame של Coddy. שיעור 9 מתוך 36.
כדור קוצים שמסתובב כל הזמן מסתובב מעט בכל פריים. יש דרך מפתה לכתוב את זה, והיא גורמת לבעיה:
ball = pygame.transform.rotate(ball, 2) # שגויבכל פריים מסובבים את התמונה שסובבה בפריים הקודם. כל סיבוב מוסיף מסגרת שקופה, ולכן ה-Surface גדל בכ-3 אחוזים בכל פריים: פי שניים בגודלו לאחר חצי שנייה, וכמעט 1,800 פיקסלים ברוחב לאחר שתי שניות. הפיקסלים גם נמרחים מעט יותר בכל סיבוב. המשחק מאט במהרה עד כדי זחילה.
שמרו את המקור ואת הזווית בנפרד, וצרו את התמונה המסובבת מהמקור בכל פריים:
angle += 2
spun = pygame.transform.rotate(ball, angle)
screen.blit(spun, spun.get_rect(center=(320, 240)))כעת spun מסובבת פעם אחת ביחס לקובץ המקורי, ללא קשר לזווית: היא לעולם לא גדולה מ-67 על 67 פיקסלים, ולעולם לא מטושטשת יותר מאשר לאחר סיבוב אחד. אותו כלל חל על כל טרנספורמציה: עבדו מהמקור, ולא מהעותק האחרון.
אתגר
בינוני- לפני הלולאה, הגדירו
angle = 0. - בכל פריים, הוסיפו 2 ל-
angle. - סובבו את
ballהמקורי בזוויתangleוציירו את התוצאה כך שמרכזה יהיה ב-(320, 240). לעולם אל תשנו אתballעצמו.
נסו בעצמכם
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Spinning Spikes")
clock = pygame.time.Clock()
ball = pygame.image.load("assets/images/spike_ball.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(ball, ball.get_rect(center=(320, 240)))
pygame.display.flip()
clock.tick(60)
pygame.quit()
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה ספרייטים ותמונות
5התנגשויות מדויקות ברמת הפיקסל
מלבנים מרגישים לא הוגניםמסכותספרייטים מדויקים ברמת הפיקסלתיבות פגיעה מעגליות3מחלקות לאובייקטים במשחק
המחלקה הראשונה שלךמתודותself הוא האובייקטרשימה של אובייקטיםאובייקטים עם תמונותתת־מחלקהתרגלו בעצמכם: Pygame אונליין