سؤال

نحن نحتفظ بلعبة فيديو قديمة تستخدم وضع رسومات بملء الشاشة يبلغ 256 لونًا مع DirectDraw.تكمن المشكلة في أن بعض التطبيقات التي تعمل في الخلفية تحاول أحيانًا تغيير لوحة النظام أثناء تشغيل اللعبة، مما يؤدي إلى تلف الرسومات.

يمكننا (أحيانًا) اكتشاف حدوث ذلك عن طريق معالجة رسالة WM_PALETTECHANGED.قمنا منذ بضعة إصدارات بتحديث التسجيل (فقط قم بتسجيل عنوان النافذة/الفئة/اسم العملية)، مما ساعد المستخدمين على تحديد التطبيقات المخالفة وإغلاقها.كان MSN Live Messenger هو السبب الشائع.

وتفاقمت المشكلة عندما اكتشفنا أن نظام التشغيل Windows Vista (و7) يقوم بذلك "بنفسه".تشير معلمات WM_PALETTECHANGED إلى CSRSS ونافذة سطح المكتب.في نظام التشغيل Vista، كان الحل البديل الذي نجح غالبًا هو فتح أي مجلد (الكمبيوتر، المستندات، وما إلى ذلك) وتركه مفتوحًا أثناء تشغيل اللعبة.يبدو سخيفا، لكنه نجح - في معظم الحالات.في نظام التشغيل Windows 7، لم يعد هذا الحل البديل يعمل بعد الآن.وجد المستخدمون أن إيقاف بعض الخدمات (Windows Update وخدمة الفهرسة) أدى أيضًا إلى حل المشكلة في بعض التكوينات.

منذ بعض الوقت بدأت للتو في تجربة أشياء عشوائية على أمل العثور على حل.وجدت أن إعداد لوحة GDI (باستخدام إنشاء/SelectPalette) قبل تعيين لوحة DirectDraw (باستخدام IDirectDrawPalette::SetEntries) سيؤدي إلى استعادة لوحة الألوان بعد تلفها (معالج WM_PALETTECHANGED).ساعد استخدام SetSystemPalette واستدعاء SetPalette على السطح الأساسي في المزيد.ومع ذلك، لا يزال هناك وميض يمكن إدراكه عندما يحاول أحد التطبيقات سرقة لوحة الألوان، وهو أمر بارز بشكل خاص أثناء التلاشي.

سؤال:هل هناك طريقة للحصول على لوحة حصرية "حقيقية"، والتي تمنع تمامًا التطبيقات الأخرى من تغيير لوحة Windows طالما أن لعبتنا تحتفظ بالتركيز؟

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

المحلول

لقد وجد شخص ما بالفعل إصلاحًا لإدخال التسجيل لهذا، هنا:

http://answers.ea.com/t5/Command-Conquer-The-Ultimate/Common-Problems-Read-This-Before-Posting/m-p/222052

ابحث عن "الألوان المخفوقة" في تلك الصفحة وستصل إلى الجزء الذي يحتوي على الإصلاح الذي تحتاجه.


نظرًا لأن الموارد عبر الإنترنت عابرة، فإليك الشرح الكامل:

أنشئ مفتاحًا جديدًا ضمن "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectDraw\Compatibility\" للبرنامج.

إذا كان البرنامج الذي تقوم بتطبيق التوافق عليه هو برنامج 32 بت، وكنت تستخدم نظام 64 بت (إما تطبيقه يدويًا أو من خلال برنامج 64 بت)، فلا تنس إضافة "Wow6432Node" " بين "Software" و"DirectDraw" للتعويض عن ذلك.

في هذا المفتاح، قم بتعيين هذه القيم:

  • "الأعلام" (REG_BINARY):[00,08,00,00]
  • "الاسم" (REG_SW):اسم الملف لبرنامجكلا يوجد مسار، فقط اسم الملف القابل للتنفيذ.
  • "المعرف" (REG_BINARY):معرف DirectDraw للتطبيق.

للحصول على معرف DirectDraw المطلوب، قم بتشغيل البرنامج ثم تحقق من مفتاح التسجيل هذا:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectDraw\MostRecentApplication

مرة أخرى، إذا كنت تستخدم نظام 64 بت وكان البرنامج الذي تقوم بذلك من أجله هو نظام 32 بت، أضف "Wow6432Node" بعد "البرنامج".

المعرف الموجود في هذا المفتاح هو أربعة بايت.قم بعكس ترتيبهم للحصول على البايتات التي سيتم وضعها في قيمة المعرف.32dd83d5 يصبح d5,83,dd,32.

نصائح أخرى

ما يمكنك فعله هو حل بديل "بسيط".نظرًا لأن لعبتك هي لعبة قديمة، فمن المحتمل ألا تتطابق مع الأجهزة الحالية، ولهذا السبب ستعمل هذه الخدعة:

  • قم بنسخ كل شيء إلى مخزن مؤقت خارج الشاشة (الذاكرة)
  • قم بتحويل المخزن المؤقت 8bit إلى 16 بت (أو 32 بت) باستخدام اللوحة الحالية (لذلك يتم أيضًا في الذاكرة)
  • انسخ محتويات المخزن المؤقت 16 بت (أو 32 بت) إلى المخزن المؤقت للشاشة
  • اقلب مخزن الشاشة المؤقت.

سيتطلب هذا الحد الأدنى من التغييرات في لعبتك، وسيتخلص من مشكلات لوحة الألوان تمامًا، على الرغم من أن لعبتك لا تزال تستخدم كل خدع لوحة الألوان

ر

"يجب تطبيق لا يدعو SetSystemPaletteUse، إلا إذا كان لديه إطار مكبر وتركيز الإدخال ". ربما بعض البرامج الأخرى على نحو غير صحيح. هذا الوصف يجعل الأمر يبدو كثيرا مثل مايكروسوفت وآمل أن جميع برامج التعاون وتقديم أي وسيلة لإجبارهم على القيام بذلك. انها مثل يجري مرة أخرى على ويندوز 3.1. :)

واقتراح عشوائي: هل حاولت SetSystemPaletteUse مع المعلمة SYSPAL_NOSTATIC256

ويمكنك أن ترى أيضا إذا وحة الخاص بك يحتوي على 20 ويندوز الألوان محفوظة. إذا كان الأمر كذلك، فهذا يعني أن أي برنامج palettised آخر يستخدم فقط الألوان ويندوز لن تحتاج إلى تغيير لوح من أجل تقديم نفسها، كما أفهمها.

وأنا لا أعرف دايركت على الإطلاق، ولكن أود أن أقترح تحاول أن تفعل التقديم الخاص بك قبالة الشاشة ثم تحويل إلى عمق عرض ... أتصور يمكنك الحصول على Direct2D للقيام بكل ذلك لك ...

وكل ما عليك هو وضع جهاز الكمبيوتر الخاص بك إلى 16 bit الألوان في لوحة التحكم للقيام وتأتي المباراة الصحيح، يعمل على Original Command and Conquer بالنسبة لي: D

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top