אם אתה מפתח משחקים המשתמש בספריית Pygame, כנראה שנתקלת בכיתה Sprite. מחלקה Sprite היא כלי רב עוצמה ליצירת דמויות משחק שניתן להזיז, לסובב ולהתאים בקלות על המסך.
עם תוכנית Python פשוטה, אתה יכול ללמוד על תהליך יצירת דמויות משחק מבוססות ספרייט ב-Pygame. גלה כיצד ליצור מחלקה בסיסית של Sprite, ולאחר מכן הוסף תכונות ושיטות לשליטה בהתנהגות.
מבוא לשיעור הספרייט של Pygame
מחלקת Sprite ב-Pygame היא מחלקת מיכל שמכילה את כל התכונות וההתנהגויות של דמות משחק. זה נובע ממחלקת ה-Surface של Pygame, המייצגת תמונה עם רוחב וגובה קבועים.
כדי לעבוד עם זה, תצטרך ליצור מחלקה חדשה שיורשת ממחלקת Sprite, ולהגדיר את כל התכונות והשיטות שתרצה שתהיה לדמות המשחק שלך.
יצירת כיתת ספרייט בסיסית לדמות משחק
ראשון, התקן את מודול ה-pygame באמצעות pip. עשה זאת עם הפקודה הזו:
צִפצוּף להתקין pygame
כדי ליצור ספרייט בסיסי, תצטרך לייבא את המחלקה Sprite מ-Pygame וליצור מחלקה חדשה שיורשת ממנה. לאחר מכן, תוכל להגדיר כל תכונות ושיטות שתרצה שתהיה לדמות המשחק שלך.
לדוגמה, ייתכן שתרצה ליצור מחלקה Sprite עבור דמות שחקן שיכולה לנוע ימינה ושמאלה על פני המסך. לשם כך, תוכל להגדיר את התכונות הבאות:
- עמדה: טופל שמחזיק את קואורדינטות ה-x וה-y של הספרייט על המסך.
- מְהִירוּת: טופל שמחזיק את המהירות בה נע הספרייט אופקית ואנכית.
והשיטות הבאות:
- עדכון(): שיטה שמעדכנת את מיקומו של הספרייט על פי מהירותו.
- לצייר(): שיטה שמושכת את הספרייט למסך.
הנה דוגמה למחלקת Sprite בסיסית המיישמת את התכונות והשיטות האלה:
יְבוּא pygame
מעמדשחקן(pygame.sprite. שֵׁדוֹן):
def__init__(עצמי, x, y, מהירות_x, מהירות_y):
סוּפֶּר().__init__()
עצמי.position = (x, y)
עצמי.velocity = (velocity_x, velocity_y)
defעדכון(עצמי):
עצמי.position = (עצמי.עמדה[0] + עצמי.מְהִירוּת[0], עצמי.עמדה[1] + עצמי.מְהִירוּת[1])
defלצייר(עצמי, משטח):
pygame.לצייר.מעגל(משטח, (255, 0, 0), עצמי.עמדה, 10)
שיטת __init__ היא מיוחדת שיטה במחלקות Python שפועל כאשר אתה יוצר מופע של המחלקה. אתה יכול להשתמש בו כדי לאתחל את התכונות של המופע.
בקוד זה, שיטת __init__ של המחלקה Player לוקחת ארבעה ארגומנטים: x, y, velocity_x ו-velocity_y. ארגומנטים אלה קובעים את המיקום והמהירות ההתחלתיים של השחקן.
שיטת __init__ קוראת גם למתודה super().__init__(), שהיא שיטת __init__ של מחלקת האב Sprite. זה הכרחי מכיוון שהמחלקה Player היא תת מחלקה של המחלקה Sprite, והשיטה __init__ של המחלקה Sprite מגדירה כמה תכונות שכל הספרייטים צריכים.
הוספת תכונות ושיטות לבקרת התנהגות
עכשיו, כשיש לך מחלקה בסיסית של Sprite, אתה יכול להוסיף תכונות ושיטות לשלוט בהתנהגות דמות המשחק שלך. זה יכול לכלול דברים כמו תנועה, התקפה, קפיצה ועוד.
כדי להוסיף את התכונות והשיטות האלה, תצטרך לחשוב על הפעולות שאתה רוצה במשחק שלך דמות שתוכל לבצע, ולהגדיר את התכונות והשיטות המתאימות בספרייט שלך מעמד.
לדוגמה, ייתכן שתרצה להוסיף שיטה לשלוט בתנועת הספרייט, כגון שיטה move_left() שמקטינה את מהירות הספרייט על ציר ה-x.
הנה דוגמה למחלקה שונה של Sprite הכוללת את התכונות והשיטות הנוספות האלה:
מעמדשחקן(pygame.sprite. שֵׁדוֹן):
def__init__(עצמי, x, y, מהירות_x, מהירות_y):
סוּפֶּר().__init__()
עצמי.position = (x, y)
עצמי.velocity = (velocity_x, velocity_y)
defעדכון(עצמי):
עצמי.position = (עצמי.עמדה[0] + עצמי.מְהִירוּת[0], עצמי.עמדה[1] + עצמי.מְהִירוּת[1])
defלצייר(עצמי, משטח):
pygame.לצייר.מעגל(משטח, (255, 0, 0), עצמי.עמדה, 10)
defזוז שמאלה(עצמי):
עצמי.velocity = (-1, עצמי.מְהִירוּת[1])
defזוז ימינה(עצמי):
עצמי.velocity = (1, עצמי.מְהִירוּת[1])
כדי להשתמש במחלקה Player במשחק Pygame שלך, תצטרך ליצור מופע של המחלקה ולקרוא לשיטות שלה לפי הצורך.
התחל ביצירת חלון ומופע של Player sprite:
# אתחול Pygame
pygame.init()# הגדר את גודל החלון
window_size = (640, 480)# צור חלון
window = pygame.display.set_mode (window_size)
# צור ספרייט שחקן
שחקן = שחקן(320, 240, 0, 0)
לאחר מכן הגדירו לולאת משחק ראשית שמטפלת באירועי מקלדת ועדכונים ומציירת את הספרייט. כאשר תלחץ על מקשי החצים שמאלה או ימינה, הספרייט ינוע בכיוון המתאים.
# לולאת משחק ראשית
בזמןנָכוֹן:
# לטפל באירועים
ל מִקרֶה ב pygame.event.get():
אם event.type == pygame. לְהַפְסִיק:
pygame.quit()
sys.exit()
אם event.type == pygame. מקש:
אם event.key == pygame. K_LEFT:
player.move_left()
אליף event.key == pygame. K_RIGHT:
player.move_right()
# עדכן את ספרייט השחקן
player.update()
# נקה את החלון
window.fill((255, 255, 255))
# צייר את ספרייט השחקן
player.draw (חלון)
# עדכן את התצוגה
pygame.display.update()
עם התוכנית שהתקבלה, תוכל לשלוט ב-sprite הנגן ולצפות בו מצייר למסך במיקומים שונים:
טעינה והצגה של גרפיקת Sprite באמצעות מודול התמונה
כעת, כשיש לך מחלקה בסיסית של Sprite עם תכונות ושיטות לשלוט בהתנהגות, סביר להניח שתרצה להוסיף קצת גרפיקה לספרייט שלך. מודול התמונה של Pygame מקל על טעינת והצגת תמונות על המסך.
כדי לטעון תמונה, תצטרך להשתמש בפונקציה pygame.image.load() אשר לוקחת נתיב קובץ כארגומנט ומחזירה אובייקט Surface. לאחר מכן תוכל להקצות אובייקט Surface זה לתכונת ספרייט, כגון self.image, שבה תוכל להשתמש כדי לצייר את הספרייט למסך.
לדוגמה, כך תוכל לטעון תמונה ולהקצות אותה לספרייט:
יְבוּא pygame
מעמדשחקן(pygame.sprite. שֵׁדוֹן):
def__init__(עצמי, x, y, מהירות_x, מהירות_y, נתיב_תמונה):
סוּפֶּר().__init__()
עצמי.position = (x, y)
עצמי.velocity = (velocity_x, velocity_y)
עצמי.image = pygame.image.load (image_path)
defעדכון(עצמי):
עצמי.position = (עצמי.עמדה[0] + עצמי.מְהִירוּת[0], עצמי.עמדה[1] + עצמי.מְהִירוּת[1])
defלצייר(עצמי, משטח):
משטח.blit(עצמי.תמונה, עצמי.עמדה)
defזוז שמאלה(עצמי):
עצמי.velocity = (-1, עצמי.מְהִירוּת[1])
defזוז ימינה(עצמי):
עצמי.velocity = (1, עצמי.מְהִירוּת[1])
קוד זה מגדיר מחלקת Player שמרחיבה את מחלקת ה-Sprite של Pygame וכוללת תכונות של מיקום, מהירות ו תמונה, כמו גם שיטות לעדכון מיקומו של הספרייט, ציור הספרייט למסך ושליטה תְנוּעָה.
אתה יכול לבדוק את זה מאגר GitHub עבור הקוד המלא!
שפר את ניהול הספרייט עם מחלקת ספרייט
הכיתה Sprite מספקת מיכל נוח לכל התכונות וההתנהגויות של דמות משחק, מה שמקל על עדכון, ציור ושליטה בספרייט על המסך.
על ידי הטמעת שיעור Sprite במשחק Pygame שלך, אתה יכול לשפר את החוויה הכוללת עבור השחקנים שלך ולייעל את תהליך הפיתוח עבור עצמך.