GameActivity में Textइनपुट Android गेम डेवलपमेंट किट का हिस्सा.

GameActivity इंटिग्रेट करती है इसके ज़रिए GameTextइनपुट:

  • रैपर उपलब्ध करा रही हूँ
  • नए टेक्स्ट इनपुट इवेंट की उपलब्धता के लिए फ़्लैग बना रहा है
  • टेक्स्ट कॉन्टेंट के लिए GameTextइनपुट के स्टेट बफ़र का इस्तेमाल करके, सीधे तौर पर कॉन्टेंट पोस्ट करना

जैसा कि नीचे दिए गए डायग्राम में दिखाया गया है, ऐप्लिकेशन अलग-अलग इंटरनल लॉजिकल लॉजिकल का इस्तेमाल करते हैं उपयोगकर्ता के टेक्स्ट इनपुट के लिए कॉम्पोनेंट:

alt_टेक्स्ट

पहले से मौजूद GameTextInput लाइब्रेरी का इस्तेमाल, इन तीन चरणों में किया जा सकता है:

  • यूज़र इंटरफ़ेस (यूआई) पर सॉफ़्ट कीबोर्ड को कंट्रोल करना
  • नया टेक्स्ट उपलब्ध होने की जानकारी
  • उपयोगकर्ता का इनपुट टेक्स्ट और उसकी स्थितियों को हासिल करना

इस दस्तावेज़ के बाकी हिस्से में इनके बारे में पूरी जानकारी दी गई है. उदाहरण के लिए GameTextInput को GameActivity इस्तेमाल करने के लिए, देखें गेम के सैंपल का डेटा स्टोर करने की जगह.

यूज़र इंटरफ़ेस (यूआई) पर सॉफ़्ट कीबोर्ड को कंट्रोल करना

यूज़र इंटरफ़ेस (यूआई) पर सॉफ़्ट कीबोर्ड को कंट्रोल करने के लिए, GameActivity में दो फ़ंक्शन मिलते हैं:

एपीआई के रेफ़रंस दस्तावेज़ों की जानकारी के लिए उन्हें देखें. इसके बाद कीबोर्ड दिखाई देता है, तो ऐप्लिकेशन का यूज़र इंटरफ़ेस (यूआई) ऐसा दिख सकता है:

alt_टेक्स्ट

देखें कि टेक्स्ट उपलब्ध है या नहीं

सॉफ़्ट कीबोर्ड इवेंट, GameTextInput से Java की तरफ़ C/C++ की मदद से JNI के ज़रिए, 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.
   }
}

उपयोगकर्ता का इनपुट टेक्स्ट वापस पाना

इनपुट टेक्स्ट और अन्य स्थितियां GameTextइनपुट के डेटा में इकट्ठा होती हैं इंटरनल बफ़र, GameTextInput::currentState_. आवेदन कॉन्टेंट वापस पाने के लिए, इनमें से किसी एक तरीके का इस्तेमाल कर सकता है:

  • GameActivity का रैपर एपीआई (सुझाया गया)
  • GameTextइनपुट एपीआई

GameActivity API की मदद से Text Input स्टेट पाएं

ऐप्लिकेशन, सामान्य कॉलबैक सिस्टम से मौजूदा टेक्स्ट इनपुट पाते हैं:

  • टेक्स्ट इनपुट इवेंट प्रोसेस करने के लिए, 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;
}

पिछले सेक्शन में दिखाए गए गेम लूप में, टेक्स्ट की जांच करें और उसे प्रोसेस करें ऊपर दिए गए टेक्स्ट इनपुट हैंडलर के साथ:

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

ऐप्लिकेशन, विकल्प के तौर पर GameTextInputState कॉन्टेंट को इसके साथ शुरू कर सकते हैं GameActivity_setTextInputState().

GameTextइनपुट एपीआई की मदद से Text Input स्टेट पाना

मौजूदा एपीआई को वापस पाने के लिए, ऐप्लिकेशन सीधे तौर पर GameTextInput API का इस्तेमाल भी कर सकते हैं GameTextInputState:

  • GameActivity_getTextInput() का इस्तेमाल करें GameActivity का इंटरनल GameTextInput इंस्टेंस पाने के लिए.
  • GameTextInput इंस्टेंस उपलब्ध हो. इसके बाद, वही GameTextInputState कॉन्टेंट पाने के लिए GameTextInput_getState() पर कॉल करें.

ध्यान रखें कि ऐप्लिकेशन को GameTextInput शुरू नहीं करना चाहिए सीधे; GameActivity अपनी शुरू करने की प्रोसेस के दौरान ऐसा पहले ही कर देता है.

कॉलबैक का तरीका वही है जो GameActivitys में इस्तेमाल किया जाता है GameActivity_getTextInputState() फ़ंक्शन का इस्तेमाल करना होगा.

रेफ़रंस

कॉन्टेंट बनाते समय डेवलपर को इन संसाधनों से मदद मिल सकती है GameActivity ऐप्लिकेशन:

सुझाव

GameActivity और GameTextText, दोनों Jetpack गेम लाइब्रेरी का हिस्सा हैं. सभी के लिए समस्याओं और सवालों को हल करने के लिए, Google IssueTracker पर गड़बड़ी बनाएं.