مدونة Metlivi

كيفية تغيير تعبير الشخصية بين أسطر الحوار في لعبة بنمط كلاسيكي (Retro)

لتغيير تعبير الشخصية بين أسطر الحوار، قم بإعداد عنصر رسومي (Sprite) مطابق لكل تعبير، ثم بدّل الصورة المعروضة للشخصية مباشرةً قبل السطر الذي يستخدمه. حافظ على ثبات موضع الـ Sprite ومحيطه الخارجي العام حتى يكون تغير الوجه واضحاً دون الإخلال بالمشهد. في Ren’Py، أسهل طريقة هي إعطاء كل تعبير وسم الصورة (Image Tag) نفسه واستخدام الأمر show مجدداً مع خاصية تعبير جديدة؛ وينطبق هذا التسلسل نفسه من حيث المبدأ في المحركات الأخرى، مع اختلاف أوامرها.

15 أكتوبر 2026قراءة مدتها 6 دقائقبقلم Metlivi Editorial Team
القسم 1

تحديد ما يجب أن يُحفّز التغيير

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

لكل سطر محدد، دوّن التعبير المطلوب والأصل الرسومي (Sprite Asset) الذي سيعرضه. يمكن لمجموعة صغيرة مثل: محايد، وسعيد، وقلق، ومتفاجئ أن تغطي العديد من المشاهد. لا تضف تنويعات إلا عندما يتطلب مشهد معين ذلك. هذا قرار تحريري وليس قاعدة يفرضها المحرك، فالمجموعة المناسبة تعتمد على الجانب الفني للعبة وحواراتها.

القسم 2

إعداد عناصر رسومية للتعبيرات تتبدل بسلاسة

استخدم نفس تأطير الشخصية، والمقياس، ونقطة الارتكاز (Anchor Point) لكل تعبير. إذا كانت كل صورة عبارة عن Sprite كامل، فقم بمحاذاة العينين والرأس والجسم عبر الملفات حتى لا يبدو أن الشخصية تقفز عند تغيير الصورة. واحرص على إبقاء الخلفية شفافة عندما يحتاج الـ Sprite إلى الظهور فوق مشهد ما.

بالنسبة لفن البكسل (Pixel Art)، عاين الصور بمقياس العرض الفعلي للعبة. إذ يمكن لإزاحة بمقدار بكسل واحد أن تكون ملحوظة للغاية عند تبديل الـ Sprites، كما أن تغيير الحجم قد يؤدي إلى تنعيم شبكة البكسل أو تشويهها. يُفضل تصدير كل تعبير بالأبعاد نفسها واستيراده بإعدادات تصفية وتغيير حجم متسقة. هذه فحوصات إنتاجية عملية؛ وتعتمد الإعدادات الدقيقة على المحرك والمشروع.

اختر أسماء ملفات أو صور متوقعة، مثل mira neutral وmira worried. في Ren’Py، تتكون أسماء الصور من وسم متبوع بخصائص اختيارية؛ ويحدد الوسم صورة الشخصية التي يمكن لأمر show الجديد استبدالها. توضح وثائق صور Ren’Py سلوك التسمية والاستبدال هذا.

القسم 3

تغيير التعبيرات في Ren’Py

عرّف المتحدث باستخدام وسم الصورة، ثم استخدم خصائص التعبير في أسطر الحوار. على سبيل المثال:

define m = Character("Mira", image="mira")

label scene:
    show mira neutral
    m "The door is open."

    m worried "I thought I locked it."

    m "Maybe the wind caught it."

هنا يمثل mira وسم الصورة، بينما يمثل neutral أو worried الخاصية. يقوم السطر الذي يحتوي على worried بتحديث صورة الشخصية المعروضة؛ ويحتفظ السطر التالي بهذا التعبير لعدم تحديد خاصية جديدة. أضف m neutral "..." في ذلك السطر الأخير إذا كان ينبغي للنص إعادتها صراحةً إلى الوضع المحايد. توضح وثائق الحوار في Ren’Py أن الشخصية المعرفة بوسم صورة يمكنها تلقي خصائص الصورة في عبارة القول (say statement)، وأن هذه الخصائص تعمل تماماً مثل أمر show المقابل عندما تكون الصورة معروضة بالفعل. حوار Ren’Py وخصائص الصورة

إذا كنت لا تريد ظهور الـ Sprite الكامل للشخصية على الشاشة، فاستخدم الفكرة نفسها مع عنصر الصورة الشخصية (Portrait) في واجهة الحوار. سيظل المحرك بحاجة إلى طريقة لربط المتحدث الحالي وتعبيره بصورة معينة؛ وقد تستخدم واجهة الصورة الشخصية اصطلاح تسمية أو بنية بيانات مختلفة. راجع وثائق إطار العمل المختار قبل نسخ بناء جملة Ren’Py إلى محرك آخر.

القسم 4

اختيار التبديل الفوري أو الانتقال التدريجي

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

يدعم Ren’Py تأثيرات الانتقال مثل dissolve عند تغيير الصور. على سبيل المثال، يطبق show mira worried with dissolve تأثيراً تدريجياً عند تغيير الصورة المعروضة. يستغرق تأثير dissolve الافتراضي الموثق نصف ثانية، وهو ما قد يبدو بطيئاً في الحوارات السريعة؛ اختبر وتيرة العرض في سياقها واختر مدة مخصصة أقصر إذا لزم الأمر. وثائق الانتقالات في Ren’Py

بالنسبة لفن البكسل، قارن بين الانتقال التدريجي والتبديل المباشر بدقة العرض المخصصة للعبة. يدمج التلاشي بين البكسلات القديمة والجديدة أثناء التغيير، مما قد يبدو ناعماً مقارنةً بالتغيير الفوري أو المتدرج عمداً. هذا قرار يتعلق بالأسلوب الفني ينبغي التحقق منه أثناء تشغيل المشهد، وليس مجرد تأثير يُضاف تلقائياً.

القسم 5

الحفاظ على ثبات الـ Sprite أثناء تغير الوجه

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

تحقق أيضاً من ترتيب الطبقات وتوقيت الحوار. لا ينبغي أن يؤدي تبديل الـ Sprite عن طريق الخطأ إلى مسح الخلفية، أو نقل الشخصية خلف صورة أخرى، أو طلب إدخال إضافي من اللاعب قبل ظهور السطر الجديد. في Ren’Py، يستبدل الأمر show الصورة التي تحمل الوسم نفسه، بينما يُستخدم hide عموماً عند مغادرة الشخصية للمشهد؛ وتوصي الوثائق على وجه التحديد باستبدال التعبير الانفعالي باستخدام show بدلاً من إخفاء الـ Sprite وإظهاره في خطوات منفصلة. قواعد عرض الصور في Ren’Py

القسم 6

التحقق من التغيير في تسلسل الحوار الفعلي

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

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

يجب أن يجعل الإعداد النهائي كل تغيير مقصوداً: يحدد النص البرمجي التعبير، ويحافظ الـ Sprite المطابق على موضع الشخصية، ويؤكد التشغيل التجريبي السريع أن التبديل يُقرأ بوتيرة الحوار.

القسم 7

المصادر

قراءات ذات صلة

متابعة استكشاف الموضوع