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:
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:
GameActivity_showSoftInput()
wyświetla klawiaturę programową.GameActivity_hideSoftInput()
ukrywa klawiaturę programową.
Ich definicje znajdziesz w dokumentacji API. Po klawiatura, interfejs aplikacji może wyglądać mniej więcej tak:
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
:
- Użyj formatu
GameActivity_getTextInput()
aby pobrać wewnętrzną instancjęGameTextInput
aplikacji GameActivity. - Mając instancję
GameTextInput
, wywołajGameTextInput_getState()
, aby uzyskać te same treściGameTextInputState
.
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
):
- GameActivity
- Dokumentacja użytkownika GameTextInput
- Przykład z agdkTunnel
- Dokumentacja Jetpack na temat GameActivity
- Dokumentacja Jetpack na temat GameTextInput
- Kod źródłowy AGDK
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.