gohud

الوضوح يُقاس

← السمات

"الجميل" مسألة ذوق، أما "الواضح" فيمكن قياسه. النص الرمادي الباهت يبدو جيدًا على شاشة جيدة ويختفي على هاتف في ضوء النهار — والاختيار بالعين يضمن وقوع ذلك عاجلًا أو آجلًا.

python3 addons/gohud/tools/check_contrast.py
ماذاالمطلوب
نص المتن4.5 : 1
النص الكبير (24px فما فوق)3 : 1
حدود وأيقونات لون التمييز3 : 1
الحدود الزخرفية2 : 1 — إذ لا تطبّق WCAG قاعدة 3:1 على الزخرفة
الأسطح المتجاورة1.12 : 1 — بما يكفي لتُقرأ البطاقة منفصلةً عن خلفيتها

نصّ بدرجة لون فوق صبغة بالدرجة نفسها

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

ولذلك لا تُختار ألوان النصوص باليد. فبنّاء السمة وGoSkin كلٌّ منهما يدفع الإضاءة — الإضاءة وحدها — حتى تُتجاوز العتبة على اللوحة التي يجلس عليها النص فعلًا. وتبقى الدرجة والتشبّع على حالهما، فتحتفظ لوحة الألوان بشخصيتها ويحتفظ تغييرها بتباينها.

اللون المقروء نصًّا واللون المرسوم مساحةً يريدان شيئين متضادّين

في سمة فاتحة، يضطر لون التحذير إلى الدكانة ليبقى مقروءًا نصًّا (#96500A). وحين ترث تعبئة الشريط ذلك اللون، يصير شريط الخبرة بنيًّا. واللون وحده لا يصلح الأمر: فالأصفر ساطع بطبعه، إذ يتجاوز 3:1 فوق مجرى رمادي أصلًا، وتغميق المجرى يجعله أسوأ (من 1.52 إلى 1.06).

فصُلَ الاثنان إذن. اللون يبقى زاهيًا — إذ تحمل لوحة الألوان ألوان تعبئة خالصة مثل warning_vivid. والحافة هي التي تحمل التباين — فـ GoSkin يرسم حدًّا خارجيًا بسماكة 1dp حول أي تعبئة تعجز عن بلوغ 3:1 مقابل مجراها، فيبقى سؤال "كم امتلأ؟" واضحًا.

MY_LIGHT = dict(
    warning=hexc("9A5407"),         # يُقرأ نصًّا
    warning_vivid=hexc("F2A007"),   # يُرسم على الشريط
)
وإغفاله يُبلَّغ عنه. من دون *_vivid، حين تخرج التعبئة داكنة يطبع البنّاء the bar looks drab — add warning_vivid to the palette (أي: الشريط باهت — أضف warning_vivid إلى لوحة الألوان). موضعٌ كان يتدهور بصمت صار يصرّح بذلك.

اللوحة العائمة لا تعرف ما وراءها

يُرسم HUD فوق اللعبة — فوق حقل ثلجي، أو داخل كهف. فإن كانت لوحته نصف شفافة، نفذ إليها ما خلفها وغيّر لون اللوحة، فهبط معه تباين النص. فعند عتامة 82% نزل النص الخافت في السمات الداكنة إلى 3.74:1 فوق خلفية ساطعة — أي دون الحد الأدنى.

ولذلك تُقاس اللوحات نصف الشفافة وخلفها الأبيض الخالص والأسود الخالص؛ فهما أسوأ ما قد يقدّمه مشهد لعبة. ولوحة HUD في السمات المرفقة معتمة بما يكفي للنجاح (92%) مع بقاء مظهرها الزجاجي.

وللسبب نفسه ألوان الأيقونات ليست ثابتة هي الأخرى. فرمز الخانة السريعة كان مكتوبًا بالأبيض صراحةً في الشيفرة، وقيس بـ 1.11:1 على سمة فاتحة — وهو اليوم يتبع اللوحة التي يجلس عليها، تمامًا كما تفعل النصوص.

فاحصان، ومدى مختلف لكلٍّ منهما. يقرأ check_contrast.py ملفات السمات؛ أما الألوان التي يمزجها المظهر أثناء التشغيل (الشرائح، الخانات) فتقيسها حزمة الاختبارات في قسم skin contrast داخل Godot.