يوفر Pygame العديد من الوظائف المضمنة لاكتشاف التصادم بين كائنات اللعبة. هذه لا تقدر بثمن لأن تحديد متى وكيف تتداخل الأجسام المتحركة بالضبط يمكن أن يكون مهمة معقدة.
تعرف على كيفية إضافة الفيزياء الأساسية والتصادمات في لعبتك باستخدام وحدة pygame.
وظائف الكشف عن الاصطدام المدمجة في Pygame
أبسط وظيفة مدمجة للكشف عن الاصطدام هي spritecollide. يأخذ كائنًا ، ومجموعة من النقوش المتحركة ، وقيمة منطقية تشير إلى ما إذا كان يجب أن "تموت" (تتم إزالتها) عند الاصطدام أم لا. تقوم هذه الوظيفة بإرجاع قائمة من النقوش المتحركة التي اصطدمت. فيما يلي مثال على كيفية استخدامه:
collided_sprites = pygame.sprite.spritecollide (sprite1 ، sprite_group ، حقيقي)
وظيفة أخرى مفيدة للكشف عن الاصطدام هي groupcollide ، والتي تأخذ مجموعتين من النقوش المتحركة وقيمة منطقية أيضًا. تقوم هذه الوظيفة بإرجاع قاموس به نقوش متحركة متصادمة كمفاتيح والعفاريت التي اصطدمت بها كقيم. فيما يلي مثال على كيفية استخدامه:
collision_dict = pygame.sprite.groupcollide (المجموعة 1 ، المجموعة 2 ، حقيقي, حقيقي)
إنشاء لعبة منصات أساسية باستخدام وظيفة spritecollide
لإنشاء لعبة منصات أساسية باستخدام Pygame ، ستحتاج إلى إنشاء كائن لاعب يمكن للمستخدم التحكم فيه وعفريت منصة ليقف عليها اللاعب. يمكنك استخدام وظيفة spritecollide لاكتشاف متى يصطدم كائن اللاعب بكائن النظام الأساسي ويمنع اللاعب من السقوط عبر المنصة.
للبدأ، قم بتثبيت وحدة pygame باستخدام نقطة:
نقطة تثبيت pygame
بعد ذلك، إنشاء فصول بسيطة للاعب والنظام الأساسي ، وكلاهما يجب أن يرث من فئة العفريت في Pygame. يجب أن يكون لفئة اللاعب طريقة تحديث للتعامل مع موضع اللاعب بناءً على السرعة. أيضًا ، يجب أن يكون لها متغير y_velocity لتطبيق تأثير الجاذبية. يجب أن يكون لفئة النظام الأساسي طريقة __init__ تأخذ إحداثيات المنصة وتخلق سطحًا بهذا الحجم.
فئة اللاعب
يمكنك إنشاء فئة لاعب باستخدام pygame.sprite. وحدة Sprite. ستعمل هذه الفئة على تهيئة اللاعب بإحداثيات x و y معينة. بعد ذلك ، ستعمل طريقة التحديث على تحديث موضع اللاعب عن طريق زيادة قيمة y_velocity.
يستورد القزم
فصللاعب(pygame.sprite. شبح):
def__فيه__(النفس ، س ، ص):
سوبر () .__ الحرف الأول __ ()
self.image = pygame. سطح((32, 32))
self.rect = self.image.get_rect (أعلى اليسار = (x، y))
self.y_velocity = 0
defتحديث(الذات):
self.rect.y + = self.y_velocity
فئة المنصة
تستخدم فئة المنصة أيضًا pygame.sprite. وحدة Sprite. ستعمل هذه الفئة على تهيئة النظام الأساسي بإحداثيات س و ص ، بالإضافة إلى العرض والارتفاع.
فصلمنصة(pygame.sprite. شبح):
def__فيه__(ذاتي ، س ، ص ، عرض ، ارتفاع):
سوبر () .__ الحرف الأول __ ()
self.image = pygame. السطح ((العرض ، الارتفاع))
self.rect = self.image.get_rect (أعلى اليسار = (x، y))
حلقة اللعبة
ستتيح لك حلقة اللعبة إنشاء نافذة بحجم 640 × 480. بعد ذلك ، سيتم تشغيل حلقة للتحقق من وجود أي أحداث ، مثل أمر quit. ستتحقق أيضًا من أي تصادمات بين المشغل والمنصة. أخيرًا ، سيملأ الشاشة باللون الأبيض ، ويرسم المشغل والمنصة ، ثم يقلب الشاشة.
لاعب = لاعب (100, 300)
player_group = pygame.sprite. مجموعة()
player_group.add (لاعب)المنصة = المنصة (50, 400, 100, 20)
platform_group = pygame.sprite. مجموعة()
platform_group.add (منصة)# تهيئة pygame وإنشاء نافذة
pygame.init ()
الشاشة = pygame.display.set_mode ((640, 480))# حلقة اللعبة الرئيسية
تشغيل = حقيقيبينما جري:
ل حدث في pygame.event.get ():
لو event.type == pygame. يترك:
تشغيل = خطأ شنيع
player_group.update ()
اصطدمت = pygame.sprite.spritecollide (لاعب ، platform_group ، خطأ شنيع)لو اصطدم:
player.y_velocity = 0
screen.fill ((255, 255, 255))
player_group.draw (شاشة)
platform_group.draw (شاشة)
pygame.display.flip ()
pygame.quit ()
أدناه هو الإخراج:
تنفيذ سلوك الجاذبية والقفز
لتنفيذ سلوك الجاذبية والقفز في لعبة المنصات الخاصة بك ، ستحتاج إلى إضافة سرعة y إلى كائن لاعبك وتحديث موقعه y في كل إطار. للقيام بذلك ، يمكنك استخدام طريقة التحديث داخل فئة المشغل وإضافة مقتطف الشفرة التالي:
فصللاعب(pygame.sprite. شبح):
def__فيه__(النفس ، س ، ص):
سوبر () .__ الحرف الأول __ ()
self.image = pygame. سطح((32, 32))
self.rect = self.image.get_rect (أعلى اليسار = (x، y))
self.y_velocity = 0
defتحديث(الذات):
self.rect.y + = self.y_velocity
self.y_velocity + = الجاذبية # تطبيق الجاذبية على السرعة y
الآن في كل مرة تقوم فيها باستدعاء طريقة التحديث ، ستقوم بتحديث موضع المشغل وفقًا للسرعة والجاذبية.
لجعل كائن اللاعب يقفز ، يمكنك ربط إجراء القفز بمفتاح أو زر معين وتحديث السرعة y للاعب بقيمة سالبة. مقتطف الشفرة التالي هو مثال على كيفية القفز عندما يضغط اللاعب على مفتاح المسافة.
JUMP_VELOCITY = -10
# داخل حلقة اللعبة
لو event.type == pygame. زر أسفل و event.key == pygame. K_SPACE:
player.y_velocity = JUMP_VELOCITY
لاحظ أنك ستحتاج إلى التحقق من event.type للتأكد من أن الحدث هو حدث KEYDOWN قبل التحقق من قيمة المفتاح.
إضافة الفيزياء الأساسية مثل الاحتكاك والتسارع
لإضافة الفيزياء الأساسية مثل الاحتكاك والتسارع إلى لعبة المنصات الخاصة بك ، ستحتاج إلى تحديث السرعة x لكائن اللاعب الخاص بك في كل إطار. يمكنك إضافة سرعة x إلى فئة اللاعب وتحديثها بنفس طريقة سرعة y. لتنفيذ الاحتكاك ، يمكنك تقليل السرعة x لكائن اللاعب بمقدار صغير في كل إطار. على سبيل المثال ، يمكنك إضافة مقتطف الشفرة التالي داخل طريقة التحديث لفئة المشغل:
الاحتكاك = 0.9
فصللاعب(pygame.sprite. شبح):
def__فيه__(النفس ، س ، ص):
سوبر () .__ الحرف الأول __ ()
self.image = pygame. سطح((32, 32))
self.rect = self.image.get_rect (أعلى اليسار = (x، y))
self.y_velocity = 0
self.x_velocity = 0
defتحديث(الذات):
self.rect.y + = self.y_velocity
self.rect.x + = self.x_velocity
self.y_velocity + = الجاذبية # تطبيق الجاذبية على السرعة y
self.x_velocity * = الاحتكاك # تطبيق الاحتكاك على السرعة x
لتنفيذ التسارع ، يمكنك تعيين متغير ، player_movement ، للحركة الأفقية ، وتحديث السرعة x لكائن اللاعب وفقًا لقيمة player_movement. يمكنك القيام بذلك عن طريق ربط الحركة بمفاتيح أو أزرار محددة وتحديث السرعة x للاعب في حلقة الحدث ، على سبيل المثال:
التسارع = 0.5
player_movement = 0
لو event.type == pygame. زر أسفل:
لو event.key == pygame. K_LEFT:
player_movement = -1
أليف event.key == pygame. K_RIGHT:
player_movement = 1
أليف event.type == pygame. مفتاح:
لو event.key في (القزم. K_LEFT ، pygame. K_RIGHT):
player_movement = 0
player.x_velocity + = player_movement * التسارع
باستخدام هذه التقنيات ، يمكنك إنشاء لعبة منصات بسيطة وممتعة باستخدام وظائف الكشف عن الاصطدام المدمجة والفيزياء الأساسية في Pygame. بقليل من الإبداع والتجريب ، يمكنك استخدام هذه التقنيات لإنشاء مجموعة متنوعة من الألعاب وآليات الألعاب المختلفة.
يمكنك العثور على الكود الكامل في ملف مستودع جيثب.
أدناه هو الإخراج:
تحسين تفاعل المستخدم مع الاصطدامات
تتطلب العديد من الألعاب شكلاً من أشكال اكتشاف الاصطدام. يمكنك استخدام الاصطدامات لإنشاء مجموعة واسعة من ميكانيكا اللعبة ، من منصات بسيطة إلى عمليات المحاكاة المعقدة القائمة على الفيزياء.
يمكن أن يؤدي تطبيق الفيزياء الأساسية مثل الجاذبية والاحتكاك والتسارع إلى تحسين تفاعل المستخدم بشكل كبير ، وإضافة الواقعية والشعور بالثقل إلى كائنات اللعبة.