"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكنني تشغيل حلقات متزامنة في Pygame دون حظر الحلقة الرئيسية؟

كيف يمكنني تشغيل حلقات متزامنة في Pygame دون حظر الحلقة الرئيسية؟

تم النشر بتاريخ 2024-11-08
تصفح:288

How Can I Run Concurrent Loops in Pygame Without Blocking the Main Loop?

إدارة الحلقات المتزامنة في Pygame

في Pygame، يمكن أن يكون التعامل مع حلقات while المتعددة في وقت واحد أمرًا بالغ الأهمية للبرامج التي تتطلب مهام متزامنة. تتناول هذه المقالة المشكلة التي أثارها المستخدم الذي يحاول تنفيذ حلقة داخل حلقة مع ضمان التنفيذ المستمر للبرنامج.

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

الحل: الاستفادة من قياس الوقت

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

هيكل الكود المنقح

next_render_time = 0 أثناء التشغيل: current_time = pygame.time.get_ticks() #الكود موجود هنا... إذا كان current_time >= next_render_time: CurrentFace = اختيار عشوائي (وجه) faceDisplay = myFont.render(str(currentFace), 1, (0,255,0)) next_render_time = current_time randint(5, 10) * 1000 ملء الشاشة((0,0,0)) Screen.blit (faceDisplay، text_rect) pygame.display.flip()
next_render_time = 0

while run:
    current_time = pygame.time.get_ticks()

    # Existing code here...

    if current_time >= next_render_time:
        currentFace = random.choice(face)
        faceDisplay = myFont.render(str(currentFace), 1, (0,255,0))
        next_render_time = current_time   randint(5, 10) * 1000

    screen.fill((0,0,0))
    screen.blit(faceDisplay, text_rect)
    pygame.display.flip()

اعتبارات حدث المؤقت

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

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

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3