سؤال

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

هل كانت مفيدة؟

المحلول

أود أن أقول ذلك بالنظر إلى مستندات pygame "لا، لا توجد طريقة عالمية لتعطيل ألفا".
ومع ذلك، هناك اثنان على الأقل 'محلي' طرق للقيام بذلك:

  • الأول سيكون لفئة فرعية pygame. السطح وتوفير التنفيذ الخاص بك من set_alpha والتي بدورها يمكن أن تحترم إعدادات ألفا العالمية الخاصة بك.

  • الخيار الثاني أكثر صعوبة بعض الشيء لأنه يعتمد على تنسيق البكسل المستخدم.لاقتباس مستندات pygame:

Surface.set_alpha
اضبط قيمة ألفا للسطح بأكمله
[...]
تختلف هذه القيمة عن قيمة ألفا Surface لكل بكسل.إذا كان تنسيق Surface يحتوي على لكل ألفا بكسل ، ثم سيتم تجاهل قيمة ألفا هذه.إذا كان جهاز Surface يحتوي على بكسل ألفا ، سيؤدي تعيين قيمة ألفا إلى لا شيء إلى تعطيل شفافية كل بكسل.
[...]

مع هذا يمكنك توفير مجموعتين من القوام:

  • واحدة بها قناة ألفا غير شفافة (لكل بكسل) والتي ستحل محل جميع مكالماتك set_alpha()
  • واحد لا يحتوي على ألفا لكل بكسل وبالتالي سيكرمك set_alpha()

نأمل أن يساعد هذا!

نصائح أخرى

ولقد قرأت أن تحويل () - وظيفة تعطيل ألفا صورة ل. ما أعرفه هو:

وباستخدام تحويل () - وظيفة يسرع blitting الصورة للصور الشاشة الكبيرة على جهاز الكمبيوتر الخاص بي إلى حوالي 150 FPS مع عمق ألوان 16 بت

image = image.convert()#video system has to be initialed
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top