קלט טקסט בפעילות במשחק חלק מ-Android Game Development Kit.

שילוב של פעילות משחקים GameTextInput מאת:

  • לספק wrapper
  • יצירת סימון לזמינות של אירוע חדש של קלט טקסט
  • באמצעות מאגר הנתונים הזמני של GameTextInput (קלט מראש) של תוכן הטקסט

כפי שמוצג בתרשים הבא, אפליקציות משתמשות בלוגיות פנימיות שונות למטרת קלט טקסט של המשתמש:

טקסט_אלטרנטיבי

השימוש בספריית GameTextInput המובנית צריך לבצע שלושה שלבים:

  • שליטה במקלדת הרוכה בממשק המשתמש
  • לדעת מתי טקסט חדש זמין
  • אחזור הטקסט שהוזן על ידי המשתמש והמצבים שלו

שאר המידע במסמך הזה מתאר אותן בפירוט. לדוגמה של GameTextInput עם GameActivity בפעולה. כדאי לראות את מאגר דוגמאות למשחקים.

שליטה במקלדת הרכה בממשק המשתמש

ב-GameActivity יש שתי פונקציות לשליטה במקלדת הרכה בממשק המשתמש:

עיינו במסמכי העזרה של ה-API כדי לראות את ההגדרות שלהם. אחרי והמקלדת מוצגת, ממשק המשתמש של האפליקציה עשוי להיראות כך:

טקסט_אלטרנטיבי

בדיקת הזמינות של הודעות טקסט

אירועי מקלדת רכה מועברים מ-GameTextInput בצד Java אל צד C/C++ דרך ה-JNI, ואז נסיעה ל-wrapper של GameActivity, סוף סוף מופיע בדגל android_app::textInputState הטמענו ב-native_app_glue. הגשת מועמדות צריך לדגום את הדגל הזה מדי פעם כדי לבצע את העיבוד המיועד:

  • GameActivity מגדיר רק את הדגל android_app::textInputState.
  • אפליקציות סוקרות את הדגל ומטפלות באירועי GameTextInput החדשים, כמו הטקסט החדש שיתווסף למאגר הנתונים הזמני.
  • אפליקציות מוחקות את android_app::textInputState.

חשוב לשים לב: android_app::textInputState לא מבדילה בין וכמה אירועי קלט טקסט.

לדוגמה פשוטה, הקוד הבא מסמן את הדגל textInputState אחרי טיפול בפקודות של מחזור אפליקציות, באירועי מגע ובאירועים מרכזיים:

while (true) {
   // Read all pending events.
   int events;
   struct android_poll_source* source;

   while ((ALooper_pollAll(engine.animating ? 0 : -1, nullptr, &events,
                                 (void**)&source)) >= 0) {
       // Process this event, etc.
       ...
       // Check if we are exiting.
       if (app->destroyRequested != 0) {
           engine_term_display(&engine);
           return;
       }
   }
   engine_handle_input(app);

   // Process text input events if there is any outstanding.
   if (app->textInputState) {
       // process TextInput events.
          ...
       //reset the textInputState flag
       app->textInputState = 0;
   }
   if (engine.animating) {
         // draw frames.
   }
}

אחזור טקסט הקלט של המשתמש

טקסטי הקלט ומצבים אחרים נצברים ב-GameTextInput מאגר נתונים זמני פנימי, GameTextInput::currentState_. הגשת מועמדות יכול להשתמש באחת מהדרכים הבאות כדי לאחזר את התוכן שלו:

  • wrapper API של GameActivity (מומלץ)
  • ממשק API של GameTextInput

קבלת מצב של קלט טקסט באמצעות GameActivity API

האפליקציות מקבלות את קלט הטקסט הנוכחי באמצעות מנגנון הקריאה החוזרת האופייני:

  • להטמיע פונקציית קריאה חוזרת מסוג GameTextInputGetStateCallback כדי לעבד אירועים של קלט טקסט.
  • קוראים לפונקציה GameActivity_getInputState() כשיש שם אחד או יותר של אירועים חריגים.
  • מוחקים את android_app::textInputState לאחר עיבוד האירועים.

בהמשך לקטע בקטע הקודם, הקוד הבא מקבל הפניה למאגר הנתונים הזמני של קלט הטקסט, מעבד אותו (לא מוצג) איפוס הדגל של האירוע:

extern "C" void GameTextInputGetStateCB(void *ctx, const struct GameTextInputState *state) {
    auto* engine = (struct engine*)ctx;
    if (!engine || !state) return;

    // Process the text event(s).
    LOGI("UserInputText: %s", state->text_UTF8);

    // Clear the text input flag.
    engine->app->textInputState = 0;
}

בגיימפליי שמוצג בקטע הקודם, בודקים ומעבדים את הטקסט עם ה-handler של קלט הטקסט שלמעלה:

if (state->textInputState) {
    GameActivity_getTextInputState(
        app->activity,
        GameTextInputGetStateCB,  // App's event handler shown above.
        &engine // Context to the GameTextInputGetStateCB function.
    );
}

אפליקציות יכולות לאתחל את התוכן של GameTextInputState באופן אופציונלי עם GameActivity_setTextInputState().

קבלת מצב קלט טקסט באמצעות GameTextInput API

אפליקציות יכולות גם להשתמש ישירות ב-API של GameTextInput כדי לאחזר את הנתונים GameTextInputState:

  • שימוש ב-GameActivity_getTextInput() כדי לקבל את מופע GameTextInput הפנימי של GameActivity.
  • כשיש לכם מופע של GameTextInput, אתם יכולים לבצע קריאה אל GameTextInput_getState() כדי לקבל את אותו תוכן ב-GameTextInputState.

שוב, חשוב לשים לב שאפליקציות לא יכולות לאתחל את GameTextInput באופן ישיר; GameActivity כבר עושה זאת במהלך תהליך האתחול.

מנגנון הקריאה החוזרת זהה לזה שמשמש את מנגנון GameActivity GameActivity_getTextInputState().

קובצי עזר

מקורות המידע הבאים יכולים לעזור למפתחים ליצור אפליקציות ב-GameActivity:

משוב

GameActivity ו-GameTextInput הם חלק מספריית המשחקים של Jetpack. לכל סוג של כדי ליצור באג ב-Google IssueTracker.