קלט טקסט בפעילות במשחק חלק מ-Android Game Development Kit.
שילוב של פעילות משחקים GameTextInput מאת:
- לספק wrapper
- יצירת סימון לזמינות של אירוע חדש של קלט טקסט
- באמצעות מאגר הנתונים הזמני של GameTextInput (קלט מראש) של תוכן הטקסט
כפי שמוצג בתרשים הבא, אפליקציות משתמשות בלוגיות פנימיות שונות למטרת קלט טקסט של המשתמש:
השימוש בספריית GameTextInput
המובנית צריך לבצע שלושה שלבים:
- שליטה במקלדת הרוכה בממשק המשתמש
- לדעת מתי טקסט חדש זמין
- אחזור הטקסט שהוזן על ידי המשתמש והמצבים שלו
שאר המידע במסמך הזה מתאר אותן בפירוט. לדוגמה של
GameTextInput
עם GameActivity
בפעולה. כדאי לראות את
מאגר דוגמאות למשחקים.
שליטה במקלדת הרכה בממשק המשתמש
ב-GameActivity
יש שתי פונקציות לשליטה במקלדת הרכה בממשק המשתמש:
GameActivity_showSoftInput()
מציג את המקלדת הרכה.GameActivity_hideSoftInput()
מסתיר את המקלדת הרכה.
עיינו במסמכי העזרה של ה-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
:
- איך מתחילים פעילות משחקים
- מסמכי תיעוד למשתמשים של GameTextInput
- דוגמה של agdkTunnel
- חומרי עזר של Jetpack ל-GameActivity
- חומרי עזר של Jetpack ל-GameTextInput
- קוד מקור של AGDK
משוב
GameActivity ו-GameTextInput הם חלק מספריית המשחקים של Jetpack. לכל סוג של כדי ליצור באג ב-Google IssueTracker.