يمكنك إضفاء الحيوية على أبسط الألعاب بجزيئات متحركة. محاكاة الحركة والانفجارات والمزيد باستخدام هذه التقنيات.

Pygame مكتبة شهيرة لتطوير الألعاب باستخدام Python. أثناء إنشاء الألعاب ، يمكن أن تؤدي إضافة المؤثرات الخاصة إلى تحسين المظهر المرئي والتجربة الشاملة للاعبين بشكل كبير.

تعد أنظمة الجسيمات تقنية قوية لإنشاء تأثيرات ديناميكية ومثيرة للاهتمام بصريًا مثل سحب الغبار والانفجارات والضباب وغير ذلك.

قم بإنشاء لعبة بسيطة

قبل الغوص في أنظمة الجسيمات والتحسينات المرئية ، ابدأ بإنشاء لعبة بسيطة باستخدام Pygame. قم بإنشاء ملف جديد باسم لعبة بسيطة وابدأ باستيراد المكتبات الضرورية وتهيئة Pygame. قم بإعداد نافذة اللعبة بعرض وارتفاع محددين.

الكود المستخدم في هذه المقالة متوفر في هذا مستودع جيثب وهو مجاني لك لاستخدامه بموجب ترخيص MIT.

داخل حلقة اللعبة الرئيسية ، تعامل مع أحداث المستخدم وقم بتحديث موضع اللاعب بناءً على ضغطات المفاتيح. ارسم مستطيلاً لكائن اللاعب باستخدام pygame.draw.rect ().

أخيرًا ، قم بتحديث نافذة اللعبة باستخدام pygame.display.flip () وإنهاء اللعبة عندما يخرج اللاعب من الحلقة. ستكون هذه اللعبة البسيطة بمثابة الأساس لإضافة تأثيرات خاصة باستخدام أنظمة الجسيمات.

instagram viewer

يجب أن ترى مربعًا أبيض يمثل اللاعب الذي يمكنك تحريكه يسارًا ويمينًا:

تكوين أنواع مختلفة من الجسيمات

الآن بعد أن تم إعداد لعبتك البسيطة ، يمكنك إضافة أنظمة جسيمات مختلفة. إنشاء فئات الجسيمات لكل تأثير وفئة نظام الجسيمات لإدارة وتحديث الجسيمات.

تأثير الجسيمات عندما يتحرك اللاعب

سيكون تأثير الجسيم الأول عبارة عن سلسلة من جزيئات الغبار المنبعثة من ظهر اللاعب عندما يبدأ اللاعب في ذلك التحرك باستخدام الماوس أو إدخال لوحة المفاتيح. بالإضافة إلى ذلك ، سيتغير اتجاه جزيئات الغبار عندما يغير اللاعب اتجاهه.

حدد أ جسيم فئة تمثل جسيمًا فرديًا. كل جسيم له موقع أولي (x و ذ) ، سرعة عشوائية (dx و دى) ، والعمر الذي يحدد المدة التي سيظل فيها الجسيم موجودًا.

أيضًا ، حدد ملف نظام الجسيمات فئة تدير مجموعة من الجسيمات. يمكنك إضافة جزيء جديد إلى النظام باستخدام add_particle () طريقة. ال تحديث() تقوم الطريقة بتحديث جميع الجسيمات في النظام وتزيل الجسيمات التي وصلت إلى نهاية عمرها الافتراضي.

# فئة الجسيمات
فصلجسيم:
def__فيه__(النفس ، س ، ص):
self.x = x
self.y = ذ
self.dx = عشوائي. موحد (-1, 1)
self.dy = عشوائي. موحد (-1, 1)
self.lifetime = 60

defتحديث(الذات):
self.x + = self.dx
self.y + = self.dy
self.lifetime - = 1

defيرسم(النفس ، نافذة):
اللون = (200, 200, 200)
الموضع = (int (self.x)، int (self.y))
pygame.draw.circle (نافذة ، لون ، موضع ، 2)

# فئة نظام الجسيمات
فصلنظام الجسيمات:
def__فيه__(الذات):
الجسيمات الذاتية = []

defadd_particle(النفس ، س ، ص):
self.particles.append (الجسيمات (س ، ص))

defتحديث(الذات):
ل الجسيم في الجسيمات الذاتية:
تحديث الجسيمات ()

لو عمر الجسيمات <= 0:
إزالة الجسيمات الذاتية (الجسيمات)

defيرسم(النفس ، نافذة):
ل الجسيم في الجسيمات الذاتية:
رسم الجسيمات (نافذة)

لدمج نظام الجسيمات في لعبتك ، تحتاج إلى إجراء بعض التعديلات على حلقة اللعبة الرئيسية. قم بإنشاء ملف جديد باسم جزيئات الحركة وأضف الكود مع التحديثات أدناه:

# إنشاء نظام الجسيمات
partle_system = نظام الجسيمات ()

# حلقة اللعبة الرئيسية
تشغيل = حقيقي
الساعة = pygame.time. ساعة()

بينما جري:
dt = clock.tick (60) / 1000.0

ل حدث في pygame.event.get ():
لو event.type == pygame. يترك:
تشغيل = خطأ شنيع

partle_y = player_y + player_height // 2
partle_x = player_x + player_width

مفاتيح = pygame.key.get_pressed ()
الحدود = player_x

لو مفاتيح [pygame. K_LEFT] و player_x> 0:
player_x - = 5
الجسيمات_نظام_إضافة_ الجسيمات (جسيم_س ، جسيم_ص)

لو مفاتيح [pygame. K_RIGHT] و الحدود:
player_x + = 5
الجسيمات_نظام_إضافة_ الجسيمات (player_x، الجسيمات_ص)

partle_system.update ()

window.fill (أسود)
player_pos = (player_x، player_y، player_width، player_height)
pygame.draw.rect (نافذة ، أبيض ، player_pos)
جسيم_نظام_رسم (نافذة)

pygame.display.flip ()

# إنهاء اللعبة
pygame.quit ()

عندما تقوم بتحريك كائن المشغل الآن ، يجب أن ترى جزيئات تؤكد على الحركة:

تأثير الانفجار

سيكون تأثير الجسيم التالي هو تأثير الانفجار الذي يحدث عندما يطلق اللاعب رصاصة. سيتكون تأثير الانفجار من جزيئات حمراء اللون تنبعث من موقع الرصاصة.

حدد أ جسيم فئة مماثلة للفئة السابقة ، ولكن هذه المرة تشمل لون معلمة لتمثيل لون الجسيم.

أيضًا ، قم بتحديث ملف نظام الجسيمات فئة للتعامل مع نوع الجسيمات الجديد. ال add_particle () الطريقة الآن إضافية لون المعلمة ويخلق الجسيمات مع اللون المحدد.

# فئة الجسيمات
فصلجسيم:
def__فيه__(ذاتي ، س ، ص ، لون):
self.x = x
self.y = ذ
self.dx = عشوائي. موحد (-2, 2)
self.dy = عشوائي. موحد (-2, 2)
self.lifetime = 30
self.color = color

defتحديث(الذات):
self.x + = self.dx
self.y + = self.dy
self.lifetime - = 1

defيرسم(النفس ، نافذة):
الموضع = (int (self.x)، int (self.y))
pygame.draw.circle (نافذة ، لون ذاتي ، موضع ، 3)

# فئة نظام الجسيمات
فصلنظام الجسيمات:
def__فيه__(الذات):
الجسيمات الذاتية = []

defadd_particle(ذاتي ، س ، ص ، لون):
self.particles.append (جسيم (س ، ص ، لون)

defتحديث(الذات):
ل الجسيم في الجسيمات الذاتية:
تحديث الجسيمات ()

لو عمر الجسيمات <= 0:
إزالة الجسيمات الذاتية (الجسيمات)

defيرسم(النفس ، نافذة):
ل الجسيم في الجسيمات الذاتية:
رسم الجسيمات (نافذة)

لدمج تأثير الانفجار في لعبتك ، تحتاج إلى إجراء بعض التعديلات على حلقة اللعبة الرئيسية. قم بإنشاء اسم ملف جديد تبادل لاطلاق النار الجسيمات وأضف الكود مع التحديثات أدناه:

# إنشاء نظام الجسيمات
partle_system = نظام الجسيمات ()

# حلقة اللعبة الرئيسية
تشغيل = حقيقي
الساعة = pygame.time. ساعة()

بينما جري:
dt = clock.tick (60) / 1000.0

ل حدث في pygame.event.get ():
لو event.type == pygame. يترك:
تشغيل = خطأ شنيع

مفاتيح = pygame.key.get_pressed ()
الحدود = player_x

لو مفاتيح [pygame. K_LEFT] و player_x> 0:
player_x - = 5

لو مفاتيح [pygame. K_RIGHT] و الحدود:
player_x + = 5

لو مفاتيح [pygame. K_SPACE]:
bullet_x = player_x + player_width // 2
bullet_y = player_y
جزيء_نظام_إضافة_جزء (رصاصة_كس ، رصاصة_ص ، أحمر)

partle_system.update ()

window.fill (أسود)
player_pos = (player_x، player_y، player_width، player_height)
pygame.draw.rect (نافذة ، أبيض ، player_pos)
جسيم_نظام_رسم (نافذة)

pygame.display.flip ()

# إنهاء اللعبة
pygame.quit ()

هنا هو الإخراج:

عندما يكون مفتاح المسافة ( القزم. K_SPACE) مضغوطًا ، أضف جسيمًا إلى نظام الجسيمات في موضع الرصاصة. هذا يخلق تأثير الانفجار مع جزيئات حمراء.

تأثير الغبار

التحسين المرئي النهائي الذي يمكنك تنفيذه هو تأثير الخلفية المتربة. سيتكون تأثير الغبار من جزيئات رمادية صغيرة تتحرك في نمط دائري ، مما يخلق خلفية ديناميكية ومغبرة.

قم بتحديث ملف جسيم فئة لتضمين زاوية و سرعة لكل جسيم. تحدد الزاوية اتجاه الحركة ، وتتحكم السرعة في سرعة تحرك الجسيمات في نمطها الدائري. تعديل تحديث() طريقة لتحديث موضع كل جسيم بناءً على زاويته وسرعته.

أيضًا ، قم بتحديث ملف نظام الجسيمات فئة للتعامل مع سلوك الجسيمات الجديد. تتحرك الجسيمات الآن في نمط دائري داخل نافذة اللعبة.

# فئة الجسيمات
فصلجسيم:
def__فيه__(ذاتي ، س ، ص ، نصف قطر):
self.x = x
self.y = ذ
نصف القطر الذاتي = نصف القطر
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 = 0

defيرسم(النفس ، نافذة):
اللون = (128, 128, 128)
pos = (int (self.x)، int (self.y))
نصف القطر = int (نصف القطر الذاتي)
pygame.draw.circle (نافذة ، لون ، نقطة بيع ، نصف قطر)

# فئة نظام الجسيمات
فصلنظام الجسيمات:
def__فيه__(الذات):
الجسيمات الذاتية = []

defadd_particle(ذاتي ، س ، ص ، نصف قطر):
self.particles.append (الجسيمات (س ، ص ، نصف القطر))

defتحديث(الذات):
ل الجسيم في الجسيمات الذاتية:
تحديث الجسيمات ()

defيرسم(النفس ، نافذة):
ل الجسيم في الجسيمات الذاتية:
رسم الجسيمات (نافذة)

لدمج تأثير الغبار في لعبتك ، تحتاج إلى إجراء بعض التعديلات على حلقة اللعبة الرئيسية. قم بإنشاء ملف جديد باسم جسيمات الغبار وأضف الكود مع التحديثات أدناه:

# إنشاء نظام جسيمات لتأثير الغبار
partle_system = نظام الجسيمات ()

# حلقة اللعبة الرئيسية
تشغيل = حقيقي
الساعة = pygame.time. ساعة()

بينما جري:
dt = clock.tick (60) / 1000.0

ل حدث في pygame.event.get ():
لو event.type == pygame. يترك:
تشغيل = خطأ شنيع

partle_x = عشوائي.randint (0، window_width)
partle_y = عشوائي.randint (0، window_height)

الجسيمات_نظام_إضافة_ الجسيمات (جسيم_س ، جسيم_ص ، 1)

partle_system.update ()

window.fill ((0, 0, 0))
جسيم_نظام_رسم (نافذة)

pygame.display.flip ()

# إنهاء اللعبة
pygame.quit ()

أضف الجسيمات بشكل عشوائي عبر نافذة اللعبة باستخدام عشوائي.randint () وظيفة. كل جسيم له نصف قطر أولي قدره 1. قم بتحديث نظام الجسيمات ورسمه على نافذة اللعبة ، مما يخلق تأثيرًا ديناميكيًا ومليئًا بالغبار.

يجب أن ترى العديد من الجسيمات على الشاشة تتحرك بشكل عشوائي ولكن بسلاسة:

أفضل الممارسات للتأثيرات الخاصة

عند إضافة مؤثرات خاصة إلى لعبة Pygame ، ضع في اعتبارك أفضل الممارسات التالية:

تحسين الأداء

يمكن أن تشتمل أنظمة الجسيمات على عدد كبير من الجسيمات ، والتي يمكن أن تؤثر على أداء اللعبة. نفذ تقنيات مثل التقسيم المكاني (على سبيل المثال ، Quadtree) لتحسين تحديثات الجسيمات والرسم.

إعادة تدوير الجسيمات

بدلاً من تكوين الجسيمات وتدميرها في كل إطار ، فكر في إعادة استخدام الجسيمات عن طريق إعادة ضبط خصائصها عندما تصل إلى نهاية عمرها الافتراضي. يساعد هذا في تقليل تخصيص الذاكرة وإلغاء تخصيصها.

تجمع الجسيمات

احتفظ بمجموعة من الجسيمات المخصصة مسبقًا لتجنب عبء إنشاء مثيلات جديدة أثناء وقت التشغيل. يمكن أن يؤدي ذلك إلى تحسين الأداء وتقليل تجزئة الذاكرة.

الحد من عدد الجسيمات

لمنع أنظمة الجسيمات من التغلب على شاشة اللعبة ، ضع حدودًا على الحد الأقصى لعدد الجسيمات وقم بإزالة الجسيمات عندما تصل إلى هذا الحد. هذا يضمن بقاء التأثيرات جذابة بصريًا دون إعاقة اللعب.

الاتساق البصري

حافظ على نمط مرئي متسق طوال اللعبة ، بما في ذلك تأثيرات الجسيمات. تأكد من أن الألوان والأحجام وأنماط الحركة للجسيمات متماسكة مع الموضوع العام وأسلوب الفن.

مؤثرات صوتية

أضف مؤثرات صوتية لاستكمال تأثيرات الجسيمات الخاصة بك. على سبيل المثال ، قم بتشغيل أصوات الانفجار عند حدوث تأثير الانفجار أو الأصوات المحيطة عند تنشيط تأثيرات الضباب أو الغبار.

اجعل الألعاب أكثر متعة مع المؤثرات الخاصة

يمكن أن تؤدي إضافة مؤثرات خاصة ، مثل أنظمة الجسيمات ، إلى ألعاب Pygame الخاصة بك إلى تحسين تجربة اللاعب بشكل كبير وجعل ألعابك أكثر جاذبية ومتعة للاعبين. من خلال تنفيذ تأثيرات الجسيمات مثل الممرات والانفجارات والضباب والغبار ، يمكنك إنشاء بيئات ديناميكية ومذهلة بصريًا.

تذكر أن تضع في اعتبارك تحسين الأداء ، وإعادة تدوير الجسيمات ، والاتساق المرئي مع دمج المؤثرات الخاصة في ألعابك. من خلال الإبداع والتجريب ، يمكنك نقل ألعاب Pygame إلى المستوى التالي وإثارة إعجاب اللاعبين بتجارب غامرة ومثيرة.