كيفية تجنب تمزيق مع Pygame على Linux / X11
سؤال
لقد لعبت مع Pygame (على Debian / Lenny). يبدو أنه يعمل بشكل جيد، باستثناء تمزيق مزعج من الصغار (وضع ملء الشاشة أو النافذة).
أنا أستخدم برنامج تشغيل SDL X11 الافتراضي. يشير googling إلى أنه مشكلة معروفة مع SDL التي يوفرها X11 أي منشأة VSYNC (حتى مع شاشة تم إنشاؤها FULLSCREEN|DOUBLEBUF|HWSURFACE
الأعلام)، ويجب أن أستخدم سائق "DGA" بدلا من ذلك.
ومع ذلك، يركض
SDL_VIDEODRIVER=dga ./mygame.py
يلقي في تهيئة Pygame مع
pygame.error: No available video device
(على الرغم من xdpyinfo
عرض ملحق XFREE86-DGA موجود).
هكذا: ما هي خدعة الحصول على تقلب Vsynced خالية من المسيل للدموع؟ إما عن طريق الحصول على هذا الشيء DGA العمل أو بعض الآلية الأخرى؟
المحلول
حسنا كان الحل في نهاية المطاف هو التبديل إلى Pyglet., ، والتي يبدو أنها تدعم OpenGL أفضل بكثير من Pygame، وليس لديها أي مشاكل وميض.
نصائح أخرى
أفضل طريقة للحفاظ على تمزيق الحد الأدنى هو الحفاظ على معدل الإطار الخاص بك أقرب إلى تردد الشاشة قدر الإمكان. لا تحتوي مكتبة SDL على VSYNC إلا إذا كنت تقوم بتشغيل OpenGL من خلاله، وبالتالي فإن الطريقة الوحيدة هي تقريب معدل الإطار بنفسك. جهاز SDL المزدوج المزدوج المخزن المؤقت غير مضمون، على الرغم من أنني لطيفة عندما تعمل. لقد رأيت ذلك في العمل.
في تجربتي مع SDL، يجب عليك استخدام OpenGL لإزالة الدموع بالكامل. إنه بعض القليل من التعديل، ولكن رسم نسيج 2D بسيط ليس كل ما معقدا ويحصل على عدد قليل من المكافآت الإضافية الأخرى التي يمكنك تنفيذها مثل الدوران والتوسع والمزج وما إلى ذلك.
ومع ذلك، إذا كنت لا تزال ترغب في استخدام برنامج التقديم للبرنامج، فسوف أوصي باستخدام تحديث المستطيل القذر. من الصعب أيضا التعود على ذلك، ولكنه يحفظ الكثير من التجهيز مما قد يسهل الاحتفاظ بالخيارات حتى السرعة وتجنب تمزق الشاشة بأكملها (إلا إذا قمت بالتمرير في منطقة اللعب بأكملها أو شيء ما). بالإضافة إلى الوقت الذي يستغرقه السحب إلى المخزن المؤقت هو الحد الأدنى الذي قد يتجنب الإيقط أثناء التحديث، وهو سبب التمزق.