כיצד לטעון ולשמור נתונים המשחק ב קורונה SDK

כיצד להשתמש SQLite לאחסן נתוני המשחק והגדרות

דבר אחד כמעט כל משחק ומשחק יש במשותף הוא הצורך לאחסן ולאחזר נתונים. אפילו המשחק הפשוט ביותר יכול לנצל את SQLite כדי לשמור את מספר הגירסה של היישום, אשר ניתן להשתמש בהם כדי להבטיח תאימות בעת ביצוע שדרוגים, או הגדרות פשוטות כגון הפעלת צליל של המשחק או כבוי.

אם אתה אף פעם לא עשיתי הרבה עבודה עם מסדי נתונים או להשתמש במאגר הנתונים ב SDK קורונה , אל תדאג. זה למעשה תהליך פשוט יחסית הודות לכוח של LUA ואת מנוע מסד נתונים SQLite מנוצל SDK קורונה. הדרכה זו תלך בתהליך של יצירת טבלת הגדרות וגם אחסון ואחזור מידע ממנו. כיצד לפתח יישומים iPad.

כמו כן יש לזכור כי טכניקה זו יכולה ללכת מעבר לאחסון הגדרות המשתמש מבוסס. לדוגמה, מה אם יש לך משחק שניתן לשחק באמצעות מצבי משחק שונים כגון מצב "סיפור" ו "ארקייד" מצב. טבלת הגדרות זו יכולה לשמש לשמירת המצב הנוכחי. או כל פיסת נתונים אחרת, כי אתה רוצה להישאר מתמשך גם אם המשתמש עוזב את המשחק relaunches אותו.

שלב ראשון: אתחול מסד הנתונים ויצירת טבלת ההגדרות

הדבר הראשון שאנחנו צריכים לעשות הוא להכריז על ספריית SQLite ולספר App שלנו איפה למצוא את קובץ מסד הנתונים. המקום הטוב ביותר לשים את הקוד הזה הוא הנכון בחלק העליון של הקובץ main.lua יחד עם הצהרות דורשים אחרים. קובץ מסד הנתונים ייווצר אם לא נמצא, ואנו נשמור אותו בתיקיה 'מסמכים' כדי שנוכל לקרוא ממנו ולכתוב עליו.

מחייבות "sqlite3"
local data_path = system.pathForFile ("data.db", system.DocumentsDirectory);
db = sqlite3.open (data_path);

שימו לב איך המשתנה "db" אינו מקומי. עשינו זאת כדי לוודא שנוכל לגשת למסד הנתונים לאורך כל הפרוייקט שלנו. ניתן גם ליצור קובץ .lua ספציפי עבור כל הפונקציות במסד הנתונים ולשמור על מסד הנתונים המותאם לקובץ זה.

לאחר מכן, עלינו ליצור את טבלת מסד הנתונים שתשמור את ההגדרות שלנו:

Local sql = "צור טבלה אם לא מופיעים הגדרות (שם, ערך);"
db: exec (sql);

הצהרה זו יוצרת את טבלת ההגדרות שלנו. זה בסדר להפעיל אותו בכל פעם היישום נטען כי אם הטבלה כבר קיימת, הצהרה זו לא תעשה שום דבר. תוכל להציב את ההצהרה הזו במקום שבו הכרזנו על מסד הנתונים או בפונקציה שמגדירה את האפליקציה שלך להפעלה. הדרישה העיקרית היא: (1) לבצע את ההצהרות הללו בכל פעם שהאפליקציה הושקה ו (2) לבצע אותה לפני כל שיחות לטעון או לשמור הגדרות.

שלב שני: שמירת הגדרות למסד הנתונים

הגדרת setSetting (שם, ערך)
sql = "מחק מתוך ההגדרות כאשר שם =" "שם .." ";";
db: exec (sql)

sql = "INSERT INTO הגדרות (שם, ערך) VALUES (" "..name ..", ".. value .."); ";
db: exec (sql)
סוֹף

setStettingString של הפונקציה (שם, ערך)
setSetting (name, "" "..");
סוֹף

הפונקציה setSetting מוחקת הגדרות קודמות שנשמרו בטבלה ומוסיפה את הערך החדש שלנו. זה יעבוד עם מספרים שלמים ומחרוזות, אבל שמירת מחרוזת דורשת ציטוטים בודדים סביב הערך, אז השתמשנו בפונקציה setSettingString לעשות את זה קצת עבודה עבורנו.

שלב שלישי: טעינת הגדרות ממסד הנתונים

פונקציה getSetting (שם)

Local sql = "בחר * מתוך ההגדרות כאשר שם =" "שם .." ";";
ערך מקומי = -1;

עבור שורה ב db: nrows (sql) לעשות
value = row.value;
סוֹף

ערך החזרה;
סוֹף

הפונקציה getSettingString (שם)
Local sql = "בחר * מתוך ההגדרות כאשר שם =" "שם .." ";";
ערך מקומי = '';

עבור שורה ב db: nrows (sql) לעשות
value = row.value;
סוֹף

ערך החזרה;
סוֹף

כאמור, שברנו את הפונקציות לשתי גרסאות: אחת עבור מספרים שלמים ואחת עבור מחרוזות. הסיבה העיקרית שעשינו את זה היא שאנחנו יכולים לאתחל אותם עם ערכים ספציפיים אם אין הגדרה במסד הנתונים. הפונקציה getSetting תחזיר -1, דבר שיודיע לנו שההגדרה לא נשמרה. ה- GetSettingString יחזיר מחרוזת ריקה.

הפונקציה getSettingString היא אופציונלית לחלוטין. ההבדל היחיד בינה לבין הפונקציה הרגילה getSetting הוא מה מוחזר אם שום דבר לא נמצא במסד הנתונים.

שלב רביעי: שימוש בטבלת ההגדרות שלנו

עכשיו שיש לנו את העבודה הקשה, אנחנו יכולים בקלות לטעון ולשמור הגדרות למסד נתונים מקומי. לדוגמה, נוכל להשתיק את הצליל עם ההצהרה הבאה:

setSetting ('sound', false);

ואנו יכולים לנצל את ההגדרה בפונקציה גלובלית להשמעת צלילים:

פונקציית playSound (soundID)
אם (getSetting ('צליל'))
audio.play (soundID)
סוֹף
סוֹף

כדי להפעיל מחדש את הצליל, אנו פשוט מגדירים את הגדרת הצליל ל- true:

setSetting ('sound', true);

החלק היפה על פונקציות אלה הוא שאתה יכול לשמור מחרוזות או מספרים שלמים אל טבלת הגדרות לאחזר אותם בקלות. זה מאפשר לך לעשות כל דבר מ שמירת שם של שחקן כדי לשמור על הציון הגבוה שלהם.

קורונה SDK: איך שכבת גרפיקה, להעביר גרפיקה ולהביא גרפיקה בחזית