אתה יכול להחיות את המשחקים הפשוטים ביותר עם חלקיקים מונפשים. הדמיית תנועה, פיצוצים ועוד באמצעות טכניקות אלו.
Pygame היא ספרייה פופולרית לפיתוח משחקים באמצעות Python. בזמן בניית משחקים, הוספת אפקטים מיוחדים יכולה לשפר מאוד את המשיכה החזותית והחוויה הכוללת של השחקנים.
מערכות חלקיקים הן טכניקה רבת עוצמה ליצירת אפקטים דינמיים ומעניינים מבחינה ויזואלית כגון ענני אבק, פיצוצים, ערפל ועוד.
צור משחק פשוט
לפני הצלילה למערכות חלקיקים ושיפורים חזותיים, התחל ביצירת משחק פשוט באמצעות Pygame. צור קובץ חדש בשם simple-game.py והתחל בייבוא הספריות הדרושות ואתחול Pygame. הגדר את חלון המשחק עם רוחב וגובה מוגדרים.
הקוד המשמש במאמר זה זמין כאן מאגר GitHub והוא בחינם עבורך לשימוש תחת רישיון MIT.
בתוך לולאת המשחק הראשית, טפל באירועי משתמש ועדכן את מיקומו של השחקן בהתבסס על לחיצות מקשים. צייר מלבן עבור אובייקט הנגן באמצעות pygame.draw.rect().
לבסוף, עדכן את חלון המשחק באמצעות pygame.display.flip() ולצאת מהמשחק כשהשחקן יוצא מהלולאה. המשחק הפשוט הזה ישמש כבסיס להוספת אפקטים מיוחדים באמצעות מערכות חלקיקים.
אתה אמור לראות ריבוע לבן המייצג את השחקן שאתה יכול להזיז ימינה ושמאלה:
יצירת סוגי חלקיקים שונים
כעת, לאחר שהגדרתם את המשחק הפשוט שלכם, תוכלו להוסיף מערכות חלקיקים שונות. צור מחלקות חלקיקים לכל אפקט ומחלקת מערכת חלקיקים לניהול ועדכון החלקיקים.
אפקט חלקיקים כאשר שחקן זז
אפקט החלקיקים הראשון יהיה שובל של חלקיקי אבק הנפלטים מגבו של השחקן כשהשחקן מתחיל להזיז באמצעות קלט עכבר או מקלדת. בנוסף, הכיוון של חלקיקי האבק ישתנה כאשר השחקן משנה כיוון.
תגדיר א חֶלְקִיק מחלקה המייצגת חלקיק בודד. לכל חלקיק יש מיקום התחלתי (איקס ו y), מהירות אקראית (dx ו dy), ואורך חיים שקובע כמה זמן החלקיק יתקיים.
כמו כן, הגדירו את א מערכת חלקיקים מחלקה שמנהלת אוסף של חלקיקים. אתה יכול להוסיף חלקיק חדש למערכת באמצעות add_particle() שיטה. ה עדכון() השיטה מעדכנת את כל החלקיקים במערכת ומסירה חלקיקים שהגיעו לסוף חייהם.
# כיתת חלקיקים
מעמדחֶלְקִיק:
def__init__(עצמי, x, y):
self.x = x
self.y = y
self.dx = random.uniform(-1, 1)
self.dy = random.uniform(-1, 1)
self.lifetime = 60defעדכון(עצמי):
self.x += self.dx
self.y += self.dy
self.lifetime -= 1defלצייר(עצמי, חלון):
צבע = (200, 200, 200)
מיקום = (int (self.x), int (self.y))
pygame.draw.circle (חלון, צבע, מיקום, 2)# כיתת מערכת חלקיקים
מעמדמערכת חלקיקים:
def__init__(עצמי):
self.particles = []defadd_particle(עצמי, x, y):
self.particles.append (חלקיק (x, y))defעדכון(עצמי):
ל חֶלְקִיק ב self.particles:
particle.update()אם particle.lifetime <= 0:
self.particles.remove (חלקיק)
defלצייר(עצמי, חלון):
ל חֶלְקִיק ב self.particles:
particle.draw (חלון)
כדי לשלב את מערכת החלקיקים במשחק שלך, עליך לבצע מספר שינויים בלולאת המשחק הראשית. צור קובץ חדש בשם movement-particles.py והוסיפו את הקוד עם העדכונים הבאים:
# צור מערכת חלקיקים
particle_system = ParticleSystem()# לולאת משחק ראשית
פועל = נָכוֹן
שעון = pygame.time. שָׁעוֹן()בזמן רץ:
dt = clock.tick(60) / 1000.0ל מִקרֶה ב pygame.event.get():
אם event.type == pygame. לְהַפְסִיק:
פועל = שֶׁקֶרparticle_y = player_y + player_height // 2
particle_x = player_x + player_widthkeys = pygame.key.get_pressed()
boundary = player_x < window_width - player_widthאם keys[pygame. K_LEFT] ו player_x > 0:
player_x -= 5
particle_system.add_particle (particle_x, particle_y)אם keys[pygame. K_RIGHT] ו גְבוּל:
player_x += 5
particle_system.add_particle (player_x, particle_y)particle_system.update()
window.fill (שחור)
player_pos = (player_x, player_y, player_width, player_height)
pygame.draw.rect (window, WHITE, player_pos)
particle_system.draw (חלון)pygame.display.flip()
# צא מהמשחק
pygame.quit()
כאשר אתה מזיז את אובייקט הנגן כעת, אתה אמור לראות חלקיקים המדגישים את התנועה:
אפקט הפיצוץ
אפקט החלקיקים הבא יהיה אפקט פיצוץ המתרחש כאשר השחקן יורה כדור. אפקט הפיצוץ יהיה מורכב מחלקיקים בצבע אדום הנפלטים ממיקום הקליע.
תגדיר א חֶלְקִיק מחלקה דומה לקודמתה, אך הפעם כוללת א צֶבַע פרמטר לייצג את צבע החלקיק.
כמו כן, עדכן את מערכת חלקיקים מחלקה לטיפול בסוג החלקיקים החדש. ה add_particle() השיטה לוקחת כעת תוספת צֶבַע פרמטר ויוצר חלקיקים עם הצבע שצוין.
# כיתת חלקיקים
מעמדחֶלְקִיק:
def__init__(עצמי, x, y, צבע):
self.x = x
self.y = y
self.dx = random.uniform(-2, 2)
self.dy = random.uniform(-2, 2)
self.lifetime = 30
self.color = צבעdefעדכון(עצמי):
self.x += self.dx
self.y += self.dy
self.lifetime -= 1defלצייר(עצמי, חלון):
מיקום = (int (self.x), int (self.y))
pygame.draw.circle (חלון, עצמי.צבע, מיקום, 3)# כיתת מערכת חלקיקים
מעמדמערכת חלקיקים:
def__init__(עצמי):
self.particles = []defadd_particle(עצמי, x, y, צבע):
self.particles.append (חלקיק (x, y, color)defעדכון(עצמי):
ל חֶלְקִיק ב self.particles:
particle.update()אם particle.lifetime <= 0:
self.particles.remove (חלקיק)
defלצייר(עצמי, חלון):
ל חֶלְקִיק ב self.particles:
particle.draw (חלון)
כדי לשלב את אפקט הפיצוץ במשחק שלך, עליך לבצע כמה שינויים בלופ המשחק הראשי. צור שם קובץ חדש shoot-particle.py והוסיפו את הקוד עם העדכונים הבאים:
# צור מערכת חלקיקים
particle_system = ParticleSystem()# לולאת משחק ראשית
פועל = נָכוֹן
שעון = pygame.time. שָׁעוֹן()בזמן רץ:
dt = clock.tick(60) / 1000.0ל מִקרֶה ב pygame.event.get():
אם event.type == pygame. לְהַפְסִיק:
פועל = שֶׁקֶרkeys = pygame.key.get_pressed()
boundary = player_x < window_width - player_widthאם keys[pygame. K_LEFT] ו player_x > 0:
player_x -= 5אם keys[pygame. K_RIGHT] ו גְבוּל:
player_x += 5אם keys[pygame. K_SPACE]:
bullet_x = player_x + player_width // 2
bullet_y = player_y
particle_system.add_particle (bullet_x, bullet_y, RED)particle_system.update()
window.fill (שחור)
player_pos = (player_x, player_y, player_width, player_height)
pygame.draw.rect (window, WHITE, player_pos)
particle_system.draw (חלון)pygame.display.flip()
# צא מהמשחק
pygame.quit()
הנה הפלט:
כאשר מקש הרווח ( pygame. K_SPACE) נלחץ, הוסף חלקיק למערכת החלקיקים במיקום הכדור. זה יוצר את אפקט הפיצוץ עם חלקיקים אדומים.
אפקט אבק
השיפור החזותי האחרון שאתה יכול ליישם הוא אפקט רקע מאובק. אפקט האבק יהיה מורכב מחלקיקים אפורים קטנים הנעים בתבנית מעגלית, ויוצרים רקע דינמי ומאובק.
עדכן את חֶלְקִיק כיתה לכלול א זָוִית ו מְהִירוּת עבור כל חלקיק. הזווית קובעת את כיוון התנועה, והמהירות שולטת באיזו מהירות נעים החלקיקים בתבנית המעגלית שלהם. שנה את עדכון() שיטה לעדכון המיקום של כל חלקיק על סמך הזווית והמהירות שלו.
כמו כן, עדכן את מערכת חלקיקים כיתה כדי לטפל בהתנהגות החלקיקים החדשה. החלקיקים נעים כעת בתבנית מעגלית בתוך חלון המשחק.
# כיתת חלקיקים
מעמדחֶלְקִיק:
def__init__(עצמי, x, y, רדיוס):
self.x = x
self.y = y
self.radius = רדיוס
self.angle = random.uniform(0, 2 * math.pi)
self.speed = random.uniform(0.5, 1.5)defעדכון(עצמי):
self.angle += 0.02
self.x += math.cos (self.angle) * self.speed
self.y += math.sin (self.angle) * self.speedאם self.x < 0:
self.x = window_width
אליף self.x > window_width:
self.x = 0אם self.y < 0:
self.y = window_height
אליף self.y > window_height:
self.y = 0defלצייר(עצמי, חלון):
צבע = (128, 128, 128)
pos = (int (self.x), int (self.y))
radius = int (self.radius)
pygame.draw.circle (חלון, צבע, מיקום, רדיוס)# כיתת מערכת חלקיקים
מעמדמערכת חלקיקים:
def__init__(עצמי):
self.particles = []defadd_particle(עצמי, x, y, רדיוס):
self.particles.append (חלקיק (x, y, רדיוס))defעדכון(עצמי):
ל חֶלְקִיק ב self.particles:
particle.update()
defלצייר(עצמי, חלון):
ל חֶלְקִיק ב self.particles:
particle.draw (חלון)
כדי לשלב את אפקט האבק במשחק שלך, עליך לבצע מספר שינויים בלולאת המשחק הראשית. צור קובץ חדש בשם dust-particle.py והוסיפו את הקוד עם העדכונים הבאים:
# צור מערכת חלקיקים להשפעת אבק
particle_system = ParticleSystem()# לולאת משחק ראשית
פועל = נָכוֹן
שעון = pygame.time. שָׁעוֹן()בזמן רץ:
dt = clock.tick(60) / 1000.0ל מִקרֶה ב pygame.event.get():
אם event.type == pygame. לְהַפְסִיק:
פועל = שֶׁקֶרparticle_x = random.randint(0, window_width)
particle_y = random.randint(0, window_height)particle_system.add_particle (particle_x, particle_y, 1)
particle_system.update()
window.fill((0, 0, 0))
particle_system.draw (חלון)pygame.display.flip()
# צא מהמשחק
pygame.quit()
הוסף חלקיקים באופן אקראי על פני חלון המשחק באמצעות ה random.randint() פוּנקצִיָה. לכל חלקיק יש רדיוס התחלתי של 1. עדכן וצייר את מערכת החלקיקים בחלון המשחק, תוך יצירת אפקט רקע דינמי ומאובק.
אתה אמור לראות חלקיקים רבים על המסך, נעים באופן אקראי אך חלק:
שיטות עבודה מומלצות לאפקטים מיוחדים
כשאתה מוסיף אפקטים מיוחדים למשחק Pygame שלך, שקול את השיטות המומלצות הבאות:
מיטוב ביצועים
מערכות חלקיקים יכולות לכלול מספר רב של חלקיקים, מה שיכול להשפיע על ביצועי המשחק. הטמע טכניקות כמו חלוקה מרחבית (למשל, Quadtree) כדי לייעל עדכוני חלקיקים ושרטוט.
מיחזור חלקיקים
במקום ליצור ולהרוס חלקיקים בכל מסגרת, שקול לעשות שימוש חוזר בחלקיקים על ידי איפוס תכונותיהם כאשר הם מגיעים לסוף חייהם. זה עוזר למזער הקצאת זיכרון והקצאת זיכרון.
איגום חלקיקים
שמור על מאגר של חלקיקים שהוקצו מראש כדי למנוע את התקורה של יצירת מופעים חדשים במהלך זמן הריצה. זה יכול לשפר את הביצועים ולהפחית את פיצול הזיכרון.
הגבל את ספירת החלקיקים
כדי למנוע ממערכות חלקיקים להכריע את מסך המשחק, הגדר מגבלות על המספר המרבי של חלקיקים והסר חלקיקים כשהם מגיעים לגבול זה. זה מבטיח שהאפקטים יישארו מושכים ויזואלית מבלי להפריע למשחק.
עקביות חזותית
שמור על סגנון ויזואלי עקבי לאורך כל המשחק שלך, כולל אפקטים של חלקיקים. ודא שצבעים, גדלים ודפוסי תנועה של חלקיקים עולים בקנה אחד עם הנושא הכללי וסגנון האמנות.
אפקטים קוליים
הוסף אפקטים קוליים כדי להשלים את השפעות החלקיקים שלך. לדוגמה, השמע קולות פיצוץ כאשר מתרחש אפקט פיצוץ או קולות סביבה כאשר אפקטים של ערפל או אבק פעילים.
הפוך את המשחקים למהנים יותר עם אפקטים מיוחדים
הוספת אפקטים מיוחדים, כגון מערכות חלקיקים, למשחקי Pygame שלך יכולה לשפר מאוד את חווית השחקן ולהפוך את המשחקים שלך למרתקים ומהנים יותר עבור השחקנים. על ידי יישום השפעות חלקיקים כמו שבילים, פיצוצים, ערפל ואבק, אתה יכול ליצור סביבות מדהימות ודינאמיות מבחינה ויזואלית.
זכור לשקול אופטימיזציה של ביצועים, מיחזור חלקיקים ועקביות ויזואלית תוך שילוב אפקטים מיוחדים במשחקים שלך. עם יצירתיות והתנסות, אתה יכול לקחת את משחקי Pygame שלך לשלב הבא ולרתק שחקנים עם חוויות סוחפות ומרגשות.