ترقية حزمة تطوير البرامج (SDK) لإدخالات Java وKotlin إلى الإصدار 1.1

يشرح هذا الدليل كيفية ترقية لعبتك من الإصدار 1.0.0 التجريبي إلى الإصدار التجريبي 1.1.0 لإدخال حزمة تطوير البرامج (SDK) اطّلِع على دليل ترقية Unity للحصول على تعليمات خاصة بـ Unity.

ملاحظات حول الإصدارات

يتيح برنامج "ألعاب Google Play على الكمبيوتر" إعادة تخصيص عناصر التحكّم في لوحة المفاتيح بناءً على روابط المفاتيح التي تقدّمها لعبتك باستخدام حزمة تطوير البرامج (SDK) للإدخال.

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

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

ويخزّن برنامج "ألعاب Google Play على الكمبيوتر" عناصر التحكّم التي تمت إعادة تخصيصها على الجهاز محليًا، لتبقى متوفّرة باستمرار في مختلف جلسات الألعاب. وبما أنّ هذه النسخة مخزَّنة على الجهاز، لن تؤثّر في تجربة الأجهزة الجوّالة، ويتم حذفها عند إلغاء تثبيت تطبيق "ألعاب Google Play على الكمبيوتر". لا يتم الاحتفاظ بإعدادات التحكم عبر العديد من أجهزة الكمبيوتر الشخصي.

ليس عليك ترقية حزمة تطوير البرامج (SDK) للإدخال لتفعيل عملية إعادة تخصيص المفاتيح في لعبتك، ولكن يمكن إيقاف عملية إعادة التعيين في لعبتك إذا تم رصد ضبط غير متوافق.

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

  • الترقية إلى الإصدار 1.1.0-beta من حزمة تطوير البرامج (SDK) للإدخال
  • عدِّل أي عمليات ربط للمفاتيح لتجنُّب عمليات الضبط غير المتوافقة.
  • يُرجى تحديث InputMap لضبط ميزة إعادة التعيين.

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

  • الترقية إلى الإصدار 1.1.0-beta من حزمة تطوير البرامج (SDK) للإدخال
  • يُرجى تحديث InputMap لضبط ميزة إعادة التعيين على غير مُفعَّلة.

يمكنك ترقية إصدار حزم SDK للإدخال إلى 1.1.0-beta للاستفادة من الميزات المتقدّمة لإعادة التعيين في "ألعاب Google Play على الكمبيوتر" من خلال استخدام InputContexts لتحديد عناصر التحكّم لمشاهد مختلفة من لعبتك، وإضافة استدعاءات للاستماع إلى أحداث إعادة التعيين، وتحديد مجموعة من المفاتيح المحجوزة التي لا يمكن للمستخدم إعادة تخصيصها، وإيقاف ميزة إعادة التعيين لكل InputAction أو InputGroup أو InputMap.

ويجب مراعاة الاستثناءات التالية عند الترقية إلى الإصدار الجديد من حزمة تطوير البرامج (SDK):

الإعدادات غير المتوافقة

يتمّ إيقاف إعادة تخصيص الإدخال في حال عدم استيفاء الشروط التالية:

  • يجب أن يتألف InputAction الذي يستخدم مفاتيح متعددة من مفتاح تعديل ومفتاح غير معدِّل. على سبيل المثال، يُعدّ Shift + A صالحًا ولكن A + B وCtrl + Alt وShift + A + Tab غير صالح.

  • لا يمكن أن يتشارك كائنان أو أكثر من عناصر InputAction أو InputGroup المعرّف الفريد نفسه.

ترقية

يتوافق الإصدار التجريبي من حزمة تطوير البرامج (SDK) 1.1.0 مع الأنظمة القديمة مع الإصدار التجريبي من حِزم تطوير البرامج (SDK) للإدخال 1.0.0. لا تزال الألعاب التي تستخدم عمليات التنفيذ السابقة لحزمة تطوير البرامج (SDK) للإدخال متوافقة مع عملية إعادة التعيين الأساسية، ما لم تستخدم إعدادًا غير متوافق. إذا كانت لعبتك تستخدم إصدارًا أقدم من حزمة SDK للإدخال، ننصحك بقراءة دليل الترقية من الإصدار 0.0.4 إلى الإصدار التجريبي 1.0.0.

تؤدي الترقية إلى الإصدار 1.1.0 إلى إصدار تجريبي إلى تفعيل ميزات جديدة من بينها:

ترقية التبعية

في حال استخدام Gradle لاستيراد حزمة تطوير البرامج (SDK) للإدخال، عليك الترقية إلى أحدث إصدار:

// build.gradle
dependencies {
   ...
   implementation 'com.google.android.libraries.play.games:inputmapping:1.1.0-beta'
   ...
}

تحديد الحقول الثابتة

بالنسبة إلى الإصدار 1.1.0-beta، من الممارسات الجيدة تحديد الكائنات InputAction وInputGroup وInputContext وInputMap كحقول ثابتة من فئة InputMappingProvider بما أنّ هذه الحقول يمكن الوصول إليها من أجزاء أخرى من تطبيقك:

Kotlin

class InputSDKProvider : InputMappingProvider {
    override fun onProvideInputMap(): InputMap { return gameInputMap }

    companion object {
        const val INPUTMAP_VERSION = "1.0.0"

        private val moveUpInputAction = InputAction.create(...)
        private val movementInputGroup = InputGroup.create(...)
        val menuContext = InputContext.create(...)
        val gameInputMap = InputMap.create(...)
    }
}

Java

public class MyInputMappingProvider implements InputMappingProvider {
    private static final String INPUTMAP_VERSION = "1.0.0";

    private static final InputAction moveUpInputAction =
        InputAction.create(...);
    private static final InputGroup movementInputGroup = InputGroup.create(...);
    public static final InputContext menuContext = InputContext.create(...);
    public static final InputMap gameInputMap = InputMap.create(...);

    @Override
    public InputMap onProvideInputMap() {
        return gameInputMap;
    }
}

تعديل InActions (إجراءات الإدخال)

تم نهائيًا إيقاف طريقة InputAction.create() لإدخال حزمة SDK 1.0.0-beta. أصبح لعنوان InputAction الآن معرّف إصدار ويمكن وضع علامة عليه تشير إلى أنّه قابل لإعادة الضبط أو لا. إنّ InputAction التي تم تحديدها باستخدام طريقة In SDK الخاصة بالإدخال 1.0.0-beta create() يمكن إعادة ربطها تلقائيًا وتفتقر إلى معلومات تحديد الإصدارات:

EnterAction في الإصدار 1.0.0 من حزمة SDK للإدخال التجريبي

Kotlin

val jumpInputAction = InputAction.create(
    "Jump",
    InputEventIds.JUMP.id,
    InputControls.create(
        listOf(KeyEvent.KEYCODE_SPACE),
        emptyList()
    )
)

Java

InputAction moveUpInputAction = InputAction.create(
    "Move Up",
    InputEventIds.MOVE_UP.ordinal(),
    InputControls.create(
        Collections.singletonList(KeyEvent.KEYCODE_W),
        Collections.emptyList()
    )
);

EnterAction في الإصدار 1.1.0 من حزمة الإصدار التجريبي للإدخال

Kotlin

companion object {
  private val moveUpInputAction = InputAction.create(
    "Move Up",
    InputActionsIds.DRIVE.ordinal.toLong(),
    InputControls.create(listOf(KeyEvent.KEYCODE_W), emptyList()),
    InputEnums.REMAP_OPTION_ENABLED) // This action is remappable
}

Java

private static final InputAction moveUpInputAction = InputAction.create(
    "Move Up",
    InputEventIds.MOVE_UP.ordinal(),
    InputControls.create(
            Collections.singletonList(KeyEvent.KEYCODE_W),
            Collections.emptyList()),
    InputEnums.REMAP_OPTION_ENABLED // this action is remappable
);

الإصدار التجريبي من نظام الإدخال (إدخال) الإصدار 1.1.0 من حزمة "SDK" (مع سلسلة الإصدار)

Kotlin

private val enterMenuInputAction = InputAction.create(
    "Enter menu",
    InputControls.create(listOf(KeyEvent.KEYCODE_ENTER), emptyList()),
    InputIdentifier.create(
    INPUTMAP_VERSION, InputActionsIds.ENTER_MENU.ordinal.toLong()),
    InputEnums.REMAP_OPTION_ENABLED
)

Java

private static final InputAction moveUpInputAction = InputAction.create(
    "Move Up",
    InputControls.create(
            Collections.singletonList(KeyEvent.KEYCODE_W),
            Collections.emptyList()),
    InputIdentifier.create(
            INPUTMAP_VERSION,
            InputEventIds.MOVE_UP.ordinal()),
    InputEnums.REMAP_OPTION_ENABLED // this action is remappable
);

ولمزيد من المعلومات عن تحديد إصدارات روابط المفاتيح، اطّلِع على المقالة أرقام تعريف مفاتيح التتبّع.

تعديل مجموعات الإدخال

في حزمة تطوير البرامج (SDK) 1.1.0-beta، يجب تحديد كل InputGroup بشكلٍ فريد. ينتمي كل InputAction إلى InputGroup، وهي مجموعة من الإجراءات ذات الصلة. وهذا يحسن التنقل وقابلية اكتشاف عناصر التحكم أثناء اللعب. بالطريقة نفسها التي يجب أن يكون بها InputAction معرّف فريد من بين جميع الإجراءات في InputContext واحد، يجب أن يكون للسمة InputGroup معرّف فريد في جميع المجموعات الحالية.

وفي الأمثلة الواردة في هذا القسم، تحتوي اللعبة على عنصرَين من عناصر InputContext يمثّلان القائمة الرئيسية وأسلوب اللعب. يتمّ تتبّع أرقام التعريف المناسبة لكل InputGroup في هذه السياقات باستخدام التعداد التالي:

Kotlin

enum class InputGroupsIds {
    // Main menu scene
    BASIC_NAVIGATION, // WASD, Enter, Backspace
    MENU_ACTIONS, // C: chat, Space: quick game, S: store
    // Gameplay scene
    BASIC_MOVEMENT, // WASD, space: jump, Shift: run
    MOUSE_ACTIONS, // Left click: shoot, Right click: aim
    EMOJIS, // Emojis with keys 1,2,3,4 and 5
    GAME_ACTIONS, // M: map, P: pause, R: reload
}

Java

public enum InputGroupsIds {
    // Main menu scene
    BASIC_NAVIGATION, // WASD, Enter, Backspace
    MENU_ACTIONS, // C: chat, Space: quick game, S: store
    // Gameplay scene
    BASIC_MOVEMENT, // WASD, space: jump, Shift: run
    MOUSE_ACTIONS, // Left click: shoot, Right click: aim
    EMOJIS, // Emojis with keys 1,2,3,4 and 5
    GAME_ACTIONS, // M: map, P: pause, R: reload
}

وتم أيضًا إيقاف طريقة InputGroup.create() ضمن حزمة تطوير البرامج (SDK) لإدخال 1.0.0-beta، تمامًا مثل InputAction. يجب تعديل InputGroup في لعبتك باستخدام معرّف الإصدار وقيمة منطقية تشير إلى ما إذا كانت كائنات InputAction في مجموعاتك قابلة لإعادة الضبط. يمكن إعادة ضبط المجموعات التي تم إنشاؤها باستخدام طريقة 1.0.0-beta create() للإدخال المهملة، ولها رقم التعريف 0، ورقم تعريف الإصدار هو سلسلة فارغة (""):

الإصدار التجريبي من In تقسيم SDK للإدخال 1.0.0

Kotlin

val movementInputGroup = InputGroup.create(
    "Basic Movement",
    listOf(
        moveUpInputAction,
        moveLeftInputAction,
        moveDownInputAction,
        moveRightInputAction,
        jumpInputAction,
        runInputAction)
)

Java

InputGroup movementInputGroup = InputGroup.create(
    "Basic movement",
    Arrays.asList(
        moveUpInputAction,
        moveLeftInputAction,
        moveDownInputAction,
        moveRightInputAction,
        jumpInputAction,
        runInputAction
    )
);

الإصدار 1.1.0 من واجهة برمجة التطبيقات للإدخال في الإصدار التجريبي

Kotlin

companion object {
    private val movementInputGroup = InputGroup.create(
        "Basic movement",
        listOf(
            moveUpInputAction,
            moveLeftInputAction,
            moveDownInputAction,
            moveRightInputAction,
            jumpInputAction,
            runInputAction),
        InputGroupsIds.BASIC_MOVEMENT.ordinal.toLong(),
        // All the actions in this groups can't be remapped
        InputEnums.REMAP_OPTION_DISABLED
    )
}

Java

private static final InputGroup movementInputGroup = InputGroup.create(
    "Basic movement",
    Arrays.asList(
            moveUpInputAction,
            moveLeftInputAction,
            moveDownInputAction,
            moveRightInputAction,
            jumpInputAction,
            runInputAction
    ),
    InputGroupsIds.BASIC_MOVEMENT.ordinal(),
    // All the actions in this groups can't be remapped
    InputEnums.REMAP_OPTION_DISABLED
);

الإصدار 1.1.0 من واجهة InSDK للإدخال (مع سلسلة الإصدار)

Kotlin

companion object {
    private val movementInputGroup  = InputGroup.create(
        "Basic movement",
        listOf(
            moveUpInputAction,
            moveLeftInputAction,
            moveDownInputAction,
            moveRightInputAction,
            jumpInputAction,
            runInputAction),
        InputIdentifier.create(
            INPUTMAP_VERSION, InputGroupsIds.BASIC_MOVEMENT.ordinal.toLong()),
        // All the actions in this groups can't be remapped
        InputEnums.REMAP_OPTION_DISABLED
    )
}

Java

private static final InputGroup movementInputGroup = InputGroup.create(
    "Basic movement",
    Arrays.asList(
            moveUpInputAction,
            moveLeftInputAction,
            moveDownInputAction,
            moveRightInputAction,
            jumpInputAction,
            runInputAction
    ),
    InputIdentifier.create(
            INPUTMAP_VERSION,
            InputGroupsIds.BASIC_MOVEMENT.ordinal()),
    // All the actions in this groups can't be remapped
    InputEnums.REMAP_OPTION_DISABLED
);

ولمزيد من المعلومات عن تحديد إصدارات روابط المفاتيح، اطّلِع على المقالة أرقام تعريف مفاتيح التتبّع.

تعديل خريطة الإدخال

تم نهائيًا إيقاف طريقة InputMap.create() لإدخال حزمة SDK 1.0.0-beta. عليك تحديث InputMap لتحديد معرّف الإصدار أو إيقاف ميزة إعادة التعيين تمامًا أو تعيين قائمة بالمفاتيح المحجوزة للعبتك والتي لا تريد أن يستخدمها المستخدم لإعادة التعيين. كل InputMap يتم تحديدها باستخدام طريقة إدخال SDK 1.0.0-beta create() يمكن إعادة ربطها تلقائيًا، ويتم تحديدها باستخدام المعرّف 0، ولا تحتوي على أي مفاتيح محجوزة.

EnterMap في إصدار SDK للإدخال 1.0.0-التجريبي

Kotlin

val gameInputMap = InputMap.create(
    listOf(movementInputGroup, mouseMovementInputGroup),
    MouseSettings.create(true, false)
)

Java

InputMap gameInputMap = InputMap.create(
    Arrays.asList(movementInputGroup, mouseMovementInputGroup),
    MouseSettings.create(true, false)
);

EnterMap في إصدار SDK للإدخال 1.1.0 - الإصدار التجريبي

Kotlin

companion object {

  const val INPUTMAP_VERSION = "1.0.0"
  const val INPUT_MAP_ID = 0

  val gameInputMap = InputMap.create(
    listOf(movementInputGroup, mouseMovementInputGroup),
    MouseSettings.create(true, false),
    InputIdentifier.create(INPUTMAP_VERSION, INPUT_MAP_ID.toLong()),
    InputEnums.REMAP_OPTION_ENABLED,
    // Use ESCAPE as reserved key
    listof(InputControls.create(listOf(KeyEvent.KEYCODE_ESCAPE), emptyList()))
  )
}

Java


public static final String INPUT_MAP_VERSION = "1.0.0-beta";
public static final long INPUT_MAP_ID = 0;

public static final InputMap gameInputMap = InputMap.create(
        Arrays.asList(movementInputGroup, mouseMovementInputGroup),
        MouseSettings.create(true, false),
        InputIdentifier.create(INPUTMAP_VERSION, INPUT_MAP_ID),
        InputEnums.REMAP_OPTION_ENABLED,
        // Use ESC key as reserved key
        Arrays.asList(
                InputControls.create(
                        Collections.singletonList(KeyEvent.KEYCODE_ESCAPE),
                        Collections.emptyList()
                )
        )
);

الخطوات التالية

مواصلة الترقية إلى الإصدار 1.1.0 من خلال تعيين عناصر تحكّم مختلفة لمشاهد مختلفة باستخدام InputContexts أو تحديث واجهة مستخدم لعبتك من خلال تلقّي إشعارات بشأن إعادة تعيين الأحداث باستخدام InputRemappingListeners.

عند تعديل عمليات ربط المفاتيح، اطّلِع على أفضل الممارسات لتصميم الروابط الرئيسية وفكِّر في القيود والقيود المفروضة على ميزة إعادة الربط.