تطوير العاب لكافة الشاشات

الإعلانات

تطوير العاب لكافة الشاشات

 

 

تطوير العاب لكافة الشاشات

عند تطوير لعبة اندرويد، من المهم توقع التنوع المحتمل في تجارب اللاعبين، و التكيف مع إحتياجات التفاعل، في الوقت الفعلي للاعب.

يمكنك زيادة مرونة اللعبة، من خلال دعمك لتجارب لاعبين مختلفة، مما يساعدك على توسيع نطاق لعبتك.

تتضمن الإختلافات الواضحة في تجربة اللاعب على ما يلي:

 

المكونات المادية للجهاز: رغم أن الهواتف توفر تجربة “أجهزة اندرويد التقليدية”، إلا أنه من الممكن التفاعل مع الالعاب..

على الأجهزة الأخرى ذات المكونات المختلفة، حيث يمكن للأجهزة التي تعمل على نظام كروم تشغيل حاوية اندرويد والتي يمكنها عرض لعبتك.

الأجهزة اللوحية التي يمكنها تشغيل اندرويد، تدعم عدة مستويات مختلفة من الدقة. أجهزة اندرويد TV تدعم تجارب غنية أكثر بالتفاصيل و أكثر تفاعلية.

يمكن للاعبين محاكاة بيئة تعدد النوافذ، بإستخدام إضافة أداة العرض. وعند إستخدام الأجهزة القابلة للطي، يمكن للاعبين تغيير حجم الشاشة خلال جلسة اللعب.

 

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

بالإضافة إلى ذلك، فإن أدوات إضافة العرض، والأجهزة القابلة للطي، تتيح للاعبين تجربة لعبتك على شاشة أكبر..

مما يجعل جلسات اللعب أطول و ذات واجهات أكثر تعقيداً و أكثر ملائمة.

 

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

يجب أن تتكيف لعبتك مع قطع الهاردوير المتوفرة، و تتعامل بأمان مع المواقف التي لا تتوفر فيها خصائص معينة.

 

يقدم هذا الدليل أفضل الممارسات، المتعلقة بتطوير اللعبة، لأنواع مختلفة من الشاشات، و تفاعلات المستخدم.

يقدم هذا الدليل أيضاً، إقتراحات حول تصميم لعبتك، و تطوير إستراتيجية إختبار فعالة.

 

 

 

 

 

 

تطوير العاب لكافة الشاشات

 

أفضل الممارسات لتصميم لعبة


عند التخطيط لتصميم اللعبة و هيكلتها، اتبع أفضل الممارسات الموضحة في الأقسام التالية:

 

التجاوب مع تغييرات التكوين يدوياً

عندما يكتشف نظام الاندرويد تغييراً في التكوين، مثل تغير حجم الشاشة، أو إتجاه الشاشة، أو طريقة الإدخال، يقوم النظام بشكلٍ إفتراضي بإعادة تشغيل النشاط الحالي.

للحفاظ على الحالة بداخل التطبيق أو اللعبة، يقوم النشاط إفتراضياً بإستدعاء الدالة ()onSaveInstanceState قبل أن يُعاد تشغيله..

والدالة ()onRestoreInstanceState بعد إعادة تشغيله. مع ذلك، هذه العملية تتطلب من النشاط إعادة تحميل كافة الخدمات و المصادر المرتبطة.

لمعرفة المزيد حول هذا السلوك الإفتراضي، راجع دليل التعامل مع تغييرات التكوين.

تخضع جلسة اللعب النموذجية لعدة تغييرات في التكوين. إذا سمحت لعبتك للنظام بالتعامل مع كل تغيير في التكوين، سيتم تدمير مشهد اللعبة..

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

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

 

 

إنشاء بنية مرنه

لإضافة دعم للعبتك على أكبر عدد ممكن من الأجهزة، اتبع أفضل الممارسات التالية:

– نشر حزم تطبيقات اندرويد بدلاً من ملفات APK الفردية. تسمح لك حزم تطبيقات اندرويد بتجميع “القطع اليدويه artifacts” ذات الدقة المختلفة..

والنماذج الهندسية المختلفة، مثل x86 و ARM، في قطعة واحدة.

والأفضل من ذلك، أن حزم تطبيقات اندرويد تدعم حدوداً أعلى لحجم لعبتك، حيث يمكن أن يصل حجم كل ملف APK أساسي..

إلى حد أقصى يبلغ 150 ميغابايت.. ويمكن للحزمة نفسها أن تكون بحجم عدة غيغابايت.

 

– إضافة دعم للبنى x86. تعمل هذه الخطوة على تحسين أداء لعبتك، على الأجهزة التي لا تدعم ARM..

لأن هذه الأجهزة يمكنها الآن تنفيذ التعليمات، دون الحاجة إلى ترجمتها أولاً.

 

 

إضافة دعم لمكتبة Vulkan

من خلال دعم مكتبة Vulkan، يمكن للعبتك تحقيق أداء أعلى للرسوميات. معظم الأجهزة تدعم واجهة الرسوميات هذه.

 

 

 

 

 

تطوير العاب لكافة الشاشات

 

إنشاء معالجات تغيير تكوين مخصصة


للإعلان عن أنواع تغييرات التكوين، التي تتعامل معها لعبتك بنفسها، قم بإضافة السمة android:configChanges لكل عنصر من عناصر النشاط <activity>..

في ملف الإيضاح الخاص بك، والذي يمثل شاشة أو واجهة معقدة.

يوضح مقتطف الكود التالي كيفية الإعلان بأن اللعبة تهتم بالتعامل مع تغييرات: حجم الشاشة، إتجاة الشاشة، و طريقة الإدخال:

<activity ...
    android:configChanges="screenSize|orientation|keyboard|keyboardHidden">
</activity>

عند حدوث تغيير التكوين المعلن عنه، يقوم النظام الآن بإستدعاء دالة مختلفة، ()onConfigurationChanged.

بداخل هذه الدالة، قم بإضافة منطق لتحديث واجهة مستخدم اللعبة:

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

تعيين طريقة الإدخال المثالية، لإستخدام اللاعب.

 

 

 

 

 

 

تطوير العاب لكافة الشاشات

 

التعامل مع تغييرات تكوين الشاشة

تتعامل لعبتك مع حجم الشاشة و تغير إتجاهها يدوياً، كلما قمت بتضمين قيم حجم الشاشة screenSize و الإتجاة orientation، على التوالي..

ضمن سمة تغير التكوين android:configChanges. يمكنك إستخدام هذه القيم الجديدة لتحديث محتوى المشهد، و مناطق إدخال اللاعب.

للحصول على إرشادات حول كيفية تصميم مخطط لعبتك، لتسهيل عملية التحديث، راجع دليل دعم أحجام مختلفة للشاشة.

في التنفيذ الخاص بلعبتك ()onConfigurationChanged، إستخدم كائن التكوين Configuration الذي تم تمريره، وكائن عرض Display مدير النوافذ..

لتحديد القيم المحدثة، لحجم الشاشة و إتجاهها، على التوالي.

تحذير: تعتمد قيمة تدوير الشاشة، على الإتجاة الإفتراضي لهاردوير الجهاز.

كنتيجة لذلك، تشير القيمة 0 إلى إتجاه عمودي على بعض الأجهزة، وإتجاه أفقي على أجهزة أخرى.

يعرض مقتطف الكود التالي كيفية تحديث حجم الشاشة و إتجاهها للعبتك:

KOTLIN

override fun onConfigurationChanged(newConfig: Configuration) {
    super.onConfigurationChanged(newConfig)
    val density: Float = resources.displayMetrics.density
    val newScreenWidthPixels = (newConfig.screenWidthDp * density).toInt()
    val newScreenHeightPixels = (newConfig.screenHeightDp * density).toInt()

    // Get general orientation; either Configuration.ORIENTATION_PORTRAIT or
    // Configuration.ORIENTATION_LANDSCAPE.
    val newScreenOrientation: Int = newConfig.orientation

    // Get general rotation; one of: ROTATION_0, ROTATION_90, ROTATION_180,
    // or ROTATION_270.
    val newScreenRotation: Int = windowManager.defaultDisplay.rotation
}

JAVA

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    float density = getResources().getDisplayMetrics().density;
    int newScreenWidthPixels = (int) (newConfig.screenWidthDp * density);
    int newScreenHeightPixels = (int) (newConfig.screenHeightDp * density);

    // Get general orientation; either Configuration.ORIENTATION_PORTRAIT or
    // Configuration.ORIENTATION_LANDSCAPE.
    int newScreenOrientation = newConfig.orientation;

    // Get general rotation; one of: ROTATION_0, ROTATION_90, ROTATION_180,
    // or ROTATION_270.
    int newScreenRotation = getWindowManager().getDefaultDisplay()
            .getRotation();
}

 

 

 

 

خصائص شاشة اللعبة

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

 

وضع ملء الشاشة

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

فيمكنك ضبط السمة android:resizeableActivity على خطأ “false” في أحد عناصر النشاط <activity>، كما هو موضح في مقتطف الكود التالي:

<activity ...
    android:resizeableActivity="false">
</activity>
ملاحظة: تؤثر السمة android:resizeableActivity على لعبتك، فقط لو كانت على أجهزة تعمل بنظام اندرويد 7.0 (المستوى 24) أو أعلى.

بإمكانك أيضاً تعيين السمة android:resizeableActivity على “false” لمنع حدوث التغييرات المعتمدة على الحجم.

ما لم يتم تشغيل لعبتك في وضع ملء الشاشة بشكلٍ دائم.. مع ذلك، يجب عليك إضافة هذه السمة، فقط كحل مؤقت لأغراض الإختبار.

 

 

 

إتجاة الشاشة

إذا كانت لعبتك التي تعتمد على أجهزة إستشعار الجهاز، لها إتجاه محدد، فحدد قيمة السمة android:screenOrientation في نشاط لعبتك..

كما هو موضح في مقتطف الكود التالي. هذا الإعداد يساعدك على منع مشهد لعبتك من الإنقلاب رأساً على عقب بشكلٍ غير متوقع.

<activity ...
    android:screenOrientation="landscape">
</activity>

 

 

 

 

خصائص شاشة الجهاز

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

 

أبعاد نسبة العرض إلى الإرتفاع

بعض الأجهزة تدعم نسب عرض إلى إرتفاع مختلفة. مثال، صُممت الأجهزة القابلة للطي، لكي تدعم نسبة عرض إلى إرتفاع 21:9 عندما تكون في حالة الطوي.

للتعامل مع هذا التنوع المحتمل، في نسبة العرض إلى الإرتفاع، قم على الأقل بتطبيق واحد من الأمور التالية:

إستهداف اندرويد 8.0 (المستوى 26) أو أعلى.

أجعل مشهد لعبتك و واجهته قابلتان لتغيير الحجم. أضبط السمة android:resizeableActivity إلى “true” على الأجهزة التي تعمل على اندرويد 7.0 (المستوى 24) و أعلى.

قم بإعلان الحد الأقصى المدعوم لنسبة العرض إلى الإرتفاع. في سمة البيانات الوصفية <meta-data> المرتبطة بلعبتك..

قم بتعيين android.max_aspect على 2.4، كما هو موضح في مقتطف الكود التالي. مع ذلك، ضع في إعتبارك أن نسبة العرض إلى الإرتفاع..

الأكبر من النسبة التي حددتها.. سوف تتسبب في عرض اللعبة في صندوق.

<application>
<meta-data android:name="android.max_aspect"
           android:value="2.4" />
</application>

 

 

 

أنشطة متعددة تُرى معاً

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

عند إستخدام إحدى هذه المخططات، يمكن للنظام أن يجعل الأنشطة المتعددة، مرئية في نفس الوقت “بشكلٍ متزامن”.

على الأجهزة التي تعمل على اندرويد 9 (المستوى 28) أو أعلى، من الممكن إستئناف كافة الأنشطة المرئية، ذات المستوى الأعلى، في نفس الوقت.

لكي يعمل هذا السلوك، تحتاج كلٍ من لعبتك و معدات الصنع OEM الخاصة بالجهاز، إلى الإشتراك في الأداء الوظيفي.

يمكنك إضافة دعم بداخل اللعبة من خلال تعيين android.allow_multiple_resumed_activities على “true” في ملف إيضاح لعبتك، كما هو موضح في المقتطف التالي:

<application>
    <meta-data android:name="android.allow_multiple_resumed_activities"
               android:value="true" />
</application>

يمكنك بعد ذلك إختبار لعبتك على أجهزة مختلفة، لمعرفة أيها يوفر دعم معدات الصنع OEM الضروريه، لإستئناف عملية التشغيل المتعدد بشكلٍ صحيح.

ملاحظة: بدون وجود دعم من كلٍ من لعبتك و معدات الصنع الخاصة بالجهاز، فإن النشاط الوحيد الذي يتم إستئنافه..

هو آخر نشاط تلقى إدخالات اللاعب، كافة الأنشطة المرئية الأخرى إما تكون في حالة البدء أو في حالة الإيقاف المؤقت.

لمزيد من المعلومات حول كيفية تكوين لعبتك، لتظهر كجزء من شاشة تعدد النوافذ، راجع دليل كيفية إضافة دعم تعدد النوافذ.

 

 

 

 

 

تطوير العاب لكافة الشاشات

 

التعامل مع أنواع مختلفة من نماذج التفاعل

تعالج لعبتك وجود لوحة المفاتيح و توفرها يدوياً، متى ما قمت بتضمين القيم keyboard و keyboardHidden، على التوالي في سمة تغير التكوين android:configChanges.

يمكنك إستخدام هذه القيم الجديدة، لتحديث طريقة الإدخال الأساسية للعبة.

عندما تقوم بتكوين لعبتك، لكي تدعم عدة أنواع من إدخالات المستخدم، ضع في إعتبارك ما يلي:

الكشف عن طرق الإدخال بدلاً من الأجهزة الفردية. هذه العقلية تقوم بتحسين تجربة المستخدم، دون التركيز أكثر من اللازم على الجهاز، الذي قد يمتلكه اللاعب.

تضمين السمة keyboardHidden في قائمة تغييرات التكوين التي تمت معالجتها يدوياً.

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

حدد طرق الإدخال المتاحة حالياً. للقيام بذلك قم بإستدعاء الدالة ()getInputDeviceIds، عند بدء تشغيل اللعبة و بعد كل تغيير في التكوين.

 

غالباً يمكنك تحديد كيفية رغبة اللاعب في التفاعل مع لعبتك، بناءً على جهاز الإدخال المفضل لديه:

– عادة ما يستخدم اللاعبون لوحة المفاتيح أو وحدة التحكم “controller”، لتنفيذ نقرات سريعة ومتعاقبة.

– عادة ما يستخدم اللاعبون شاشة تعمل باللمس أو لوحة لمس “فأرة اللابتوب المدمجة” لتنفيذ إجراءات أكثر تعقيداً.

– عادة ما يستخدم اللاعبون الفأرة، لتنفيذ إدخال عالي الدقة.

ملاحظة: توفير طريقة الإدخال، يمكن أن يكون غير مستقر، أثناء تفاعل اللاعبين مع لعبتك.

مثال، قد يقوم اللاعب بفصل لوحة المفاتيح، و توصيل وحدة تحكم أثناء اللعب. 

توفر الأقسام التاليه أفضل الممارسات لأنواع محددة من أجهزة الإدخال.

 

 

لوحة المفاتيح

عند إنشاء مخطط لوحة مفاتيح خاص بلعبتك، خذ بالإعتبار كيفية تنقل اللاعب خلال مشهد معين، وكذلك، كيفية تفاعله مع إعدادات لعبتك.

عادة ما تكون المفاتيح (WASD) أو الأسهم، أفضل للتحكم في حركة الشخصية. من الأفضل أيضاً، تعيين مفتاح معين لكل إجراء مهم أو مهارة مهمة..

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

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

ملاحظة: حتى لو تفاعل المستخدمون مع لعبتك بإستخدام الفأرة أو لوحة اللمس في كثير من الأحيان، فمن المهم إضافة دعم لوحة المفاتيح..

لتكون طريقة إدخال بديلة للاعبين الذين يحتاجون لإستخدام ميزة سهولة الوصول.

لمزيد من المعلومات بشأن دعم لوحة المفاتيح في لعبتك، راجع الدليل الذي يوضح كيفية دعم التنقل بإستخدام لوحة المفاتيح وكذلك الدليل الذي يوضح كيفية التعامل مع إجراءات لوحة المفاتيح.

 

 

 

وحدة التحكم باللعبة

عند الإتصال بأجهزة اندرويد، تعمل وحدة التحكم باللعبة “controller”، كلوحة مفاتيح ذات مخطط مخصص.

إستخدم واجهات البرمجة InputDevice, KeyEvent, و MotionEvent لتمرير أحداث و أسماء الجهاز، عرض إعدادات المفاتيح، والتحكم في ردود فعل اللمس.

لمزيد من المعلومات حول معالجة، إدخالات وحدة التحكم في لعبتك، راجع الدليل الذي يوضح كيفية دعم وحدة التحكم باللعبة.

 

 

الفأرة أو لوحة اللمس

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

من المهم أن تدرك بأنه من خلال طلب إلتقاط المؤشر، سيتم توجيه كافة إدخالات الفأرة إلى لعبتك. لذا، بعد أن تحظى لعبتك بالمعلومات التي تحتاجها..

قم بتحرير إلتقاط المؤشر، لكي يتمكن اللاعبون من إستعادة التحكم بالفأرة القياسية الخاصة بأجهزتهم.

على الأجهزة التي تعمل على اندرويد 8.0 (المستوى 26) أو أعلى، يمكنك إستخدام واجهة إلتقاط الفأرة، للمساعدة في عملية إلتقاط المؤشر.

بالنسبة للألعاب التي تتفاعل مع إدخالات عالية الدقة، يمكنك الحصول على إحداثيات المؤشر الحالية، من خلال إستدعاء الدالتين ()getX و ()getY.

للحصول على معلومات إضافية، حول دعم إدخالات الفأرة و إدخالات لوحة اللمس في لعبتك، راجع الدليل الذي يوضح كيفية تتبع حركات اللمس والمؤشر..

وكذلك الدليل الذي يوضح كيفية التعامل مع إيماءات اللمس المتعددة.

 

 

 

إختبار لعبتك

قبل إطلاق لعبتك، اختبر كيفية إستجابتها لتغييرات التكوين، من خلال إستكمال الخطوات الموضحة في الأقسام التالية.

 

 

تحديث خطة الإختبار الخاصة بك

عند التحقق من صحة وظائف لعبتك، قم بتضمين حالات الإختبار التالية: تطوير العاب لكافة الشاشات تطوير العاب لكافة الشاشات

– تصغير و تكبير النافذة التي تحتوي على لعبتك إلى أقصى حد. ( لن ينطبق على لعبتك إذا كانت في وضع ملء الشاشة بشكلٍ دائم.)

– تغيير حجم الشاشة. تطوير العاب لكافة الشاشات تطوير العاب لكافة الشاشات

– تغيير إتجاه الشاشة. ( لن ينطبق على لعبتك إذا كانت ذات إتجاه ثابت.)

– توصيل و فصل أجهزة الإدخال، مثل لوحة المفاتيح و الفأرة.

– تنفيذ الإستئنافات المتعددة، لو كانت لعبتك تدعمها.

أيضاً، ضع في إعتبارك، تحديث نظام التحكم في جودة اللعبة، بحيث يمكنك تحسين مجموعة أكبر من تجارب اللاعبين.

للحصول على أفضل الممارسات المتعلقة بإختبار لعبتك، راجع دليل أساسيات الإختبار.

 

 

 

 

 

إستخدام أدوات الإختبار و تصحيح الأخطاء

بإمكانك إجراء الإختبارات بإستخدام مجموعة متنوعة من الأدوات التي تدعمها منصة اندرويد:

  • المحاكيات، بما في ذلك، محاكي اندرويد و Firebase Test Lab.
ملاحظة: يحتوي محاكي اندرويد على دعم لأنظمة كروم و الأجهزة القابلة للطي.

للإطلاع على المقال باللغة الإنجليزية أضغط هنا.

الإعلانات

اترك رد