التفاصيل الصغيرة هي التي تقرّر إن كان يبدو جيدًا
اصقل اللوحات الكبيرة ما شئت — فالذي يلفت النظر دائمًا شيء صغير: كلمة انقسمت نصفين، أو توهّج قُصّ طرفه، أو خانة مزدحمة. أربعة أمور كهذه رُصدت في 2026-09-13 وأُصلحت في الودجات والسمات، لا في شاشة العرض التوضيحي، فتنال كل شاشة النتيجة نفسها.
| ما ظهر | السبب | الإصلاح |
|---|---|---|
كلمة Done في العلامة الإرشادية صارت Don/e |
الزرّ المفعَّل فيه الالتفاف يطرح عرض نصّه من حدّه الأدنى — فإن ضُغط انكسر داخل الكلمة | GoStyle.fit_words(): الكلمة الواحدة لا تلتفّ أبدًا؛ وعدة كلمات تلتفّ، لكن أطول كلمة تتّسع دائمًا — والحكم على النص المعروض لا على مفتاح الترجمة، ويعيده النموذج عند تغيّر اللغة |
| توهّج زرّ بعرض الشاشة كاملًا قُصّ رأسيًا من جهة اليسار | حاوية التمرير تقصّ عند حافتها بلا استثناء. ولم ينجُ إلا الجانب الأيمن، بفضل مجرى شريط التمرير | GoScroll يستعير حشوة الأب ليدفع حافته 12dp إلى الخارج ثم يعيدها في الداخل — فيبقى المحتوى في مكانه |
| الوقت والأيقونة والعدد مرصوصة رأسيًا داخل خانة | ثلاثة صفوف داخل 48dp | أيقونة كبيرة في الوسط، والاختصار أعلى اليسار، والعدد شارةً أسفل اليمين، والوقت المتبقي شارةً فوق الأيقونة — ولوحات الشارات تأتي من badge_box() في المظهر |
| قائمة منسدلة مسطّحة بلا تحديد ظاهر | تمرير المؤشر فوق العنصر كان يستعمل لوحة الزر؛ وعلامات الاختيار الدائرية كانت علامات المحرك الباهتة الافتراضية | لوحة تمرير مخصّصة (بصبغة تمييز هادئة)، ورسوم الاختيار الدائري نفسها المستعملة في مربعات الاختيار، وارتفاع عنصر يناسب اللمس |
امنح الأزرار الأيقونية وصفًا عبر GoStyle.icon_button(icon, action, -1, tooltip_key) —
فالتلميح لمستخدمي الفأرة، واسم الوصولية لقارئات الشاشة، كلاهما يأتي من تلك القيمة الواحدة.
وgohud يرسم التلميح بنفسه: فتلميح المحرك الافتراضي يقسم النص حرفًا في كل سطر حين يخطئ
حسابُ عرضه (قيس بعرض 1dp).
بطاقة العلامة الإرشادية تتنحّى عن التجهيزات الثابتة
في الوضع العرضي كانت البطاقة تُرسَل إلى الحافة العليا أو السفلى تمامًا — حيث تعيش الرؤوس وقطع HUD
بالضبط؛ وفي العرض التوضيحي كانت تجلس على → × في الرأس. أما الآن فتبقى بمحاذاة هدفها،
وتلتفّ حول أي GoHudAnchor يحجز مساحة، وتأخذ ما سواه من عوائق عبر
keep_clear. وتتحرك أقصر مسافة تتجاوز بها العائق دون أن تغطّي الهدف، وتبقى مكانها حين
تضيق الشاشة عن تجاوز كل شيء — فالتداخل أهون من الاختفاء.
أما عمقها — أي أن تُقرأ فوق الصفحة — فيأتي من مقابض المظهر
(float_shadow_size وfloat_shadow_lift وfloat_shadow_alpha؛ والمظاهر المشطوفة تستعمل float_glow_size).
tour.keep_clear = [header_bar, toolbar] # تجهيزات ثابتة ليست مراسيَ
الشاشات ذات الفأرة ولوحة المفاتيح
الإصبع لا حالة تمرير له. ابنِ للهاتف وحده فتمرّ حالتان خاصتان بسطح المكتب بلا فحص —
وإحداهما كانت معطوبة: حلقة التركيز في gohud كانت غير مرئية على الزر الأساسي. فاللوحة
بلون التمييز والحلقة كذلك: 1.00:1، أي اللون نفسه مرسومًا فوق نفسه. وبالتنقّل بلوحة
المفاتيح لم تكن هناك وسيلة لمعرفة أين أنت.
الأزرار المصمتة (GoPrimaryButton وGoDangerSolidButton) تستعمل حلقة
تتباين مع لوحتها هي — داكنة على سمة داكنة، بيضاء على فاتحة، وقوس تصويب داكن في طراز الخيال
العلمي. وفاحص التباين يقيس حلقة التركيز مقابل اللوحة التي تجلس عليها، فتصمد القاعدة عند تغيير
لوحة الألوان (إذ تطلب WCAG 2.4.11 نسبة 3:1 لمؤشرات التركيز).
ودجات الـ HUD
GoHudAnchor — تسعة مواضع
يحترم المنطقة الآمنة وهوامش الحواف. امنحه landscape_spot فينتقل في الوضع العرضي —
فأدوات التحكم التي تجلس أسفل الوسط في الوضع الطولي يمكن أن تنتقل إلى أسفل اليمين.
إبقاء المحتوى من تحت HUD
حين تتقاسم شاشة متمررة العرضَ مع HUD، ينزلق المحتوى تحته فتتداخل مجموعتا النص حتى لا تُقرأ أيّ منهما. وقد حدث ذلك مرتين في هذه الإضافة: نصّ نائب في حقل إدخال انعصر بين الخانات السريعة، ومقبض مفتاح تبديل في الإعدادات حطّ على شريط الصحة.
form.avoid_hud = true # ابتعد عن كل GoHudAnchor ظاهر
joystick_anchor.reserve_space = false # …إلا ما لا يظهر إلا تحت الإصبع
كل مستطيل يُتفادى في الاتجاه الأقل كلفة من حيث المساحة. فالشريط في أعلى اليمين يُلتفّ حوله نزولًا على هاتف بالوضع الطولي (13% من الارتفاع) وجانبًا في الوضع العرضي (21% من العرض) — إذ إن تفاديه رأسيًا في الوضع العرضي يكلّف 27% من الشاشة. والأرض التي تُخلى تُطرح قبل قياس المستطيل التالي.
قطع HUD تتصادم فيما بينها أيضًا
المواضع التسعة تقسم الشاشة؛ لكنها لا تضمن أن تتفادى القطع بعضها. فشريط إشعار عريض في أعلى الوسط حطّ تمامًا على شريط الصحة في أعلى اليمين فأخفى قيمته — ولم يكن بوسعك أن تقرأ كم بقي من الصحة.
notice_anchor.avoid_peers = true # يستقرّ تحت HUD الثابت
notice_anchor.reserve_space = false # ولا يدفع الصفحة ما دام ظاهرًا
وهو يتنحّى رأسيًا فقط — إذ إن تحركه جانبًا كذلك يجعل الإشعار المتوسّط يظهر في مكان مختلف في كل مرة. وهو لا يتفادى إلا القطع التي لا تتنحّى هي الأخرى: فلو تنحّى الاثنان لتبادلا المكانين إلى الأبد.
GoBar — الصحة والمانا والخبرة
var hp := GoBar.new()
hp.label_text = "HP"
hp.ink = GoUi.color(GoTheme.DANGER_FILL) # التوكن الخاص بالتعبئة وحدها
hp.set_values(320, 500) # "320 / 500"
التغيّرات تتدرّج على مدى 0.18 ثانية — فشريط صحة يقفز لا يخبرك بمقدار الضربة التي تلقّيتها.
وreduce_motion يجعله فوريًا. والأعداد الكبيرة تُختصر إلى 12.3k حتى لا يهتزّ
عرض الشريط كلما زادت الخانات أو نقصت.
GoSlot — خانة سريعة واحدة
الأيقونة والكمية ومهلة الاستعداد والاختصار على وجه واحد. فتعليق الشارات على دائرة صغيرة يجعل لكل خانة عرضًا مختلفًا فيتمايل الصف.
touch_peers.
keyboard_focus مطفأ افتراضيًا، حتى لا يقف صفّ من ثماني خانات بين مستخدم لوحة المفاتيح وكل
عناصر الإعدادات في ترتيب Tab. شغّله حين تكون لوحة المفاتيح أو ذراع التحكم هي وسيلة الإدخال الوحيدة.
GoJoystick — عصا افتراضية
| الوضع | السلوك |
|---|---|
FIXED | في المكان نفسه دائمًا — يسهل إيجاده دون النظر |
FOLLOW | يظهر حيث يحطّ الإبهام |
RELATIVE | يظلّ يتبع الإبهام بعد ظهوره — مريح في الحركة الطويلة |
قيمة Vector2 القادمة من moved طولها بين 0 و1، فتستطيع ضربها مباشرةً في
سرعة؛ وهي لا تتغير بتغيّر حجم الشاشة ولا كثافتها.
GoIconButton — يبدو صغيرًا ويُضغط كبيرًا
touch_peers.