GameActivity חלק מ-Android Game Development Kit.
GameActivity
היא ספריית Jetpack שנועדה לעזור למשחקי Android לעבד פקודות של מחזור החיים של האפליקציה, אירועי קלט וקלט טקסט בקוד C/C++ של האפליקציה. GameActivity
הוא צאצא ישיר של NativeActivity
ויש לו ארכיטקטורה דומה:
כפי שמודגם בתרשים שלמעלה, GameActivity
מבצע את הפעולות הבאות:
- אינטראקציה עם מסגרת Android דרך הרכיב בצד Java.
- העברת פקודות של מחזור החיים של האפליקציה, אירועי קלט וטקסט קלט לצד המקורי.
- מודלים של קוד מקור ב-C/C++ לשלושה רכיבים לוגיים:
- פונקציות JNI של GameActivity, שתומכות ישירות בפונקציונליות של Java ב-GameActivity ומעבירות את האירועים לתור ב-
native_app_glue
. -
native_app_glue
, שפועל בעיקר ב-thread מקורי משלו (שונה מה-thread הראשי של האפליקציה), ומבצע משימות באמצעות ה-looper שלו. - קוד המשחק של האפליקציה, שמבצע שאילתות ומעבד את האירועים שמוכנסים לתור בתוך
native_app_glue
ומריץ את קוד המשחק בתוך השרשורnative_app_glue
.
- פונקציות JNI של GameActivity, שתומכות ישירות בפונקציונליות של Java ב-GameActivity ומעבירות את האירועים לתור ב-
עם GameActivity
, אתם יכולים להתמקד בפיתוח הליבה של המשחק ולא לבזבז זמן רב מדי על טיפול בקוד JNI.
אם אתם כבר מכירים את NativeActivity
, אלה ההבדלים העיקריים בין GameActivity
לבין NativeActivity
:
-
GameActivity
עובר רינדור ל-SurfaceView
, וכך קל יותר למשחקים ליצור אינטראקציה עם רכיבים אחרים של ממשק המשתמש. - באירועים של קלט מגע וקלט מקלדת, ל-
GameActivity
יש הטמעה חדשה לגמרי עם הממשקandroid_input_buffer
, בנפרד מ-InputQueue
שמשמש אתNativeActivity
. -
GameActivity
הוא מחלקה נגזרת שלAppCompatActivity
, שמאפשרת לכם להשתמש בצורה חלקה ברכיבי Jetpack אחרים.ActionBar
,Fragment
ואחרים זמינים. -
GameActivity
מוסיף פונקציונליות של הזנת טקסט על ידי שילוב של הספרייה GameTextInput. - אפליקציות שנגזרות מ-
GameActivity
צפויות לבנות את כל שלושת החלקים של קוד C/C++ בספרייה אחת. לעומת זאת, פונקציות ה-JNI שלNativeActivity
הן חלק מהמסגרת (נטענות תמיד על ידי מערכת ההפעלה). לכן, רק הקוד שלnative_app_glue
ושל האפליקציה ב-C/C++ אמור להיבנות לספרייה אחת. -
NativeActivity
הוא חלק ממסגרת Android ופועל לפי מחזור ההפצה שלה (בדרך כלל שנתי). GameActivity
הוא חלק מספריית Jetpack, שבה מחזור השחרור הרבה יותר תדיר (בדרך כלל אחת לשבועיים). כך אפשר לקבל תכונות חדשות ותיקוני באגים הרבה יותר מהר.
הפצת מיקומים
הספרייה GameActivity
זמינה בערוצים הבאים:
- כחלק מספריית Android Jetpack (מומלץ)
- כקוד מקור של AOSP
קוד C/C++ מסופק כקוד מקור בכל ערוצי ההפצה, בפורמט Prefab. בגרסה 1.2.2 של GameActivity נוספה לספרייה סטטית להפצה. החל מגרסה זו ואילך, מומלץ להשתמש בספרייה הסטטית במקום בקוד המקור.
התוכן של ספריית Jetpack
הספרייה Jetpack, GameActivity, מופצת עם קובץ AAR. קובץ ה-AAR הזה מכיל את הרכיבים העיקריים הבאים:
- קובץ JAR לקוד Java
- הספרייה הסטטית C/C++
game-activity_static
כלולה ב-GameActivity בגרסה 1.2.2 ואילך. - קוד מקור C/C++ (בתיקייה
/prefab
)
ההוראות לשילוב שמופיעות בקישור בדף הזה מניחות שאפשר להשתמש ב-Prefab במערכת הבנייה. אם לא, אפשר להעתיק את קוד המקור שדחוס בתיקייה prefab/modules/game-activity/include
למערכת הבנייה ולבצע את השלבים הנדרשים לשילוב. מבנה קבצים דומה קיים לגרסאות שמופיעות ב-androidx
בספריית Android Jetpack. כברירת מחדל, gradle פורס קובצי AAR בספריית המטמון שלו (~/.gradle/caches/…). אפשר למצוא את קוד המקור של C/C++ על ידי חיפוש של prefab/modules/game-activity/include
ובחירת המיקום מתחת לגרסת ההפצה הרצויה.
הוראות לשילוב באמצעות ספריית Jetpack מפורטות במאמר תחילת העבודה עם GameActivity.
התוכן של קוד המקור של AOSP
ב-AOSP תמיד מופיע קוד המקור העדכני ביותר. כדי ליצור גרסאות משלכם או לשלב ישירות את קוד המקור בסביבת הפיתוח, צריך לפעול לפי [ההוראות ליצירת גרסה][GameActivity implementation]{: .external}. קוד המקור של C/C++ נשמר במבנה קבצים שדומה לספריית Jetpack.
מדריכי שילוב
כדי לשלב את GameActivity
באפליקציות שלכם, פועלים לפי המדריכים האלה:
מקורות מידע נוספים
מידע נוסף על GameActivity
זמין במקורות הבאים:
- נתוני גרסה של GameActivity ו-AGDK
- שימוש ב-GameTextInput ב-GameActivity.
- מדריך להעברת נתונים (מיגרציה) של NativeActivity
- מאמרי העזרה של GameActivity
- הטמעה של GameActivity.
משוב
כדי לדווח על באגים או לבקש תכונות חדשות ב-GameActivity, אפשר להשתמש בכלי למעקב אחר בעיות ב-GameActivity.