Pole tekstowe w aktywności w grze Zawiera Android Game Development Kit.

Integrowana jest aplikacja GameActivity GameTextInput, autor:

  • dostarczanie kodu
  • utworzenie flagi dostępności nowego zdarzenia wprowadzania tekstu
  • bezpośrednio przy użyciu bufora stanu GameTextInput do treści tekstowych

Jak pokazano na poniższym diagramie, aplikacje wykorzystują różne wewnętrzne komponenty do wprowadzania tekstu użytkownika:

tekst_alternatywny

Aby zacząć korzystać z wbudowanej biblioteki GameTextInput, trzeba wykonać 3 ogólne kroki:

  • Sterowanie klawiaturą programową w interfejsie
  • Sprawdzanie dostępności nowego SMS-a
  • Pobieranie tekstu wpisanego przez użytkownika i jego stanów

Zostały one szczegółowo opisane w dalszej części tego dokumentu. Na przykład: GameTextInput, w którym działa GameActivity, zobacz repozytorium gier-samples.

Steruj klawiaturą ekranową w interfejsie

GameActivity udostępnia 2 funkcje do sterowania klawiaturą programową w interfejsie:

Ich definicje znajdziesz w dokumentacji API. Po klawiatura, interfejs aplikacji może wyglądać mniej więcej tak:

tekst_alternatywny

Sprawdź dostępność SMS-ów

Zdarzenia klawiatury ekranowej są przekazywane z interfejsu GameTextInput po stronie Javy do po stronie C/C++ przez JNI, po czym przejdź do kodu GameActivity, odbicie w flagie android_app::textInputState zostały wdrożone w native_app_glue. Aplikacje powinien okresowo sondować tę flagę, aby zrealizować zamierzone przetwarzanie:

  • GameActivity ustawia tylko flagę android_app::textInputState.
  • Aplikacje odpytują flagę i obsługują nowe zdarzenia GameTextInput, np. nowego tekstu dodanego do bufora wejściowego.
  • Aplikacje tracą android_app::textInputState.

Pamiętaj, że android_app::textInputState nie rozróżnia pojedynczych kategorii i wielokrotnego wprowadzania tekstu.

W przypadku tego prostego przykładu ten kod odpytuje flagę textInputState po obsługa poleceń cyklu aplikacji, zdarzeń dotknięcia i kluczowych zdarzeń:

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.
   }
}

Pobierz tekst wpisany przez użytkownika

Teksty wejściowe i inne stany są zbierane w interfejsie GameTextInput bufor wewnętrzny, GameTextInput::currentState_. Aplikacje może użyć jednego z tych sposobów pobrania treści:

  • Interfejs API opakowań GameActivity (zalecany)
  • Interfejs API GameTextInput

Pobieranie stanu TextInput za pomocą interfejsu GameActivity API

Aplikacje otrzymują bieżące dane wejściowe za pomocą typowego mechanizmu wywołania zwrotnego:

  • Zaimplementuj funkcję wywołania zwrotnego typu GameTextInputGetStateCallback, aby przetwarzać zdarzenia wprowadzania tekstu.
  • Zadzwoń pod numer GameActivity_getInputState(), gdy jest kilka zaległych wydarzeń.
  • Usuń android_app::textInputState po zakończeniu przetwarzania zdarzeń.

Kontynuując fragment kodu z poprzedniej sekcji, uzyskuje odwołanie do bufora wejściowego tekstu, przetwarza go (nie wyświetla się) i resetuje flagę zdarzenia:

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;
}

Sprawdź i przetwórz tekst w pętli gry widocznej w poprzedniej sekcji. za pomocą powyższego modułu obsługi wprowadzania tekstu:

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

Aplikacje mogą opcjonalnie inicjować zawartość GameTextInputState przy użyciu GameActivity_setTextInputState()

Pobieranie stanu TextInput za pomocą interfejsu GameTextInput API

Aplikacje mogą też bezpośrednio używać interfejsu API GameTextInput do pobierania bieżącego GameTextInputState:

Pamiętaj, że aplikacje nie powinny inicjować interfejsu GameTextInput bezpośrednio; GameActivity ma już to za sobą podczas procesu inicjowania.

Mechanizm wywołania zwrotnego jest taki sam jak używany przez funkcję GameActivity GameActivity_getTextInputState().

Pliki referencyjne

Te materiały mogą być przydatne dla programistów podczas tworzenia Aplikacje (GameActivity):

Opinia

GameActivity i GameTextInput są częścią biblioteki gier Jetpack. Dla każdej problemów i pytań, zgłoś błąd w narzędziu Google IssueTracker.