חיתוך גיליון ספרייטים
חלק מהיחידה ספרייטים ותמונות במסלול ה-Pygame של Coddy. שיעור 25 מתוך 36.
אנימציה מורכבת מכמה תמונות שמוצגות בזו אחר זו. משחקים שומרים לעיתים קרובות את התמונות האלה בקובץ אחד, גיליון ספרייטים: רשת של פריימים קטנים המסודרים זה לצד זה. קוד ההתחלה מצייר את assets/sheets/platformer_characters.png בשלמותו, 9 פריימים לרוחב ו־3 לגובה, כל אחד בגודל 24 על 24 פיקסלים. שתי תנוחות ההליכה של הדמות הירוקה הן השתיים הראשונות בשורה העליונה.
sheet.subsurface(rect) מחזירה לך את החלק מהגיליון שנמצא בתוך Rect, בתור Surface משלו, בלי להעתיק אף פיקסל. פריים מספר col בשורה row מתחיל ב־(col * 24, row * 24):
frames = []
for col in (0, 1):
frame = sheet.subsurface((col * 24, 0, 24, 24))
frames.append(pygame.transform.scale_by(frame, 3))24 פיקסלים הם זעירים בחלון בגודל 640 על 480, ולכן כל פריים מוגדל פי 3 לגודל 72 על 72. הגדלה של פיקסל ארט במספר שלם שומרת על הקצוות החדים שלו. חתכו והגדילו פעם אחת, לפני הלולאה, ושמרו את הפריימים ברשימה: בשיעורים הבאים תבחרו אחד מהם לפי האינדקס שלו.
אתגר
בינוני- לפני הלולאה, צרו את
frames: הפריימים בעמודות 0 ו-1 בשורה העליונה, כל אחד בגודל 24 על 24, מוגדלים פי 3. - במקום את כל הגיליון, ציירו את
frames[0]ב-(200, 200)ואתframes[1]ב-(368, 200).
נסו בעצמכם
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Sprite Sheet")
clock = pygame.time.Clock()
sheet = pygame.image.load("assets/sheets/platformer_characters.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(sheet, (212, 204))
pygame.display.flip()
clock.tick(60)
pygame.quit()
כל השיעורים ביחידה ספרייטים ותמונות
5התנגשויות מדויקות ברמת הפיקסל
מלבנים מרגישים לא הוגניםמסכותספרייטים מדויקים ברמת הפיקסלתיבות פגיעה מעגליות3מחלקות לאובייקטים במשחק
המחלקה הראשונה שלךמתודותself הוא האובייקטרשימה של אובייקטיםאובייקטים עם תמונותתת־מחלקהתרגלו בעצמכם: Pygame אונליין