วิธีโหลดและบันทึกข้อมูลเกมใน Corona SDK

วิธีการใช้ SQLite เพื่อเก็บข้อมูลเกมและการตั้งค่า

สิ่งหนึ่งที่เกือบทุกแอปและเกมมีเหมือนกันคือต้องเก็บและดึงข้อมูล แม้แต่เกมที่เรียบง่ายที่สุดก็สามารถใช้ SQLite เพื่อบันทึกหมายเลขเวอร์ชันแอปซึ่งสามารถใช้เพื่อรับประกันความเข้ากันได้เมื่อทำการอัปเกรดหรือตั้งค่าอย่างง่ายเช่นเปิดหรือปิดเสียงของเกม

ถ้าคุณไม่เคยทำงานอะไรมากกับฐานข้อมูลหรือใช้คุณลักษณะฐานข้อมูลใน Corona SDK ไม่ต้องกังวล เป็นกระบวนการที่ค่อนข้างตรงไปตรงมาด้วยพลังของ LUA และเครื่องมือฐานข้อมูล SQLite ที่ใช้ใน Corona SDK บทแนะนำนี้จะอธิบายขั้นตอนการสร้างตารางการตั้งค่าและทั้งเก็บและเรียกข้อมูลจากข้อมูล วิธีพัฒนาแอป iPad

โปรดทราบว่าเทคนิคนี้สามารถทำได้มากกว่าการจัดเก็บการตั้งค่าตามผู้ใช้ ตัวอย่างเช่นถ้าคุณมีเกมที่สามารถเล่นได้โดยใช้โหมดเกมที่แตกต่างกันเช่นโหมด "เรื่องราว" และโหมด "อาร์เคด" ตารางการตั้งค่านี้สามารถใช้เพื่อจัดเก็บโหมดปัจจุบันได้ หรือข้อมูลอื่น ๆ ที่คุณต้องการให้คงอยู่ต่อไปแม้ว่าผู้ใช้จะออกจากเกมและเปิดใช้งานอีกครั้ง

ขั้นตอนที่หนึ่ง: การเริ่มต้นฐานข้อมูลและสร้างตารางการตั้งค่า

สิ่งแรกที่เราต้องทำก็คือประกาศไลบรารี SQLite และบอกแอปของเราว่าจะหาไฟล์ฐานข้อมูลที่ไหน สถานที่ที่ดีที่สุดในการใส่รหัสนี้เป็นสิทธิที่ด้านบนของไฟล์ main.lua พร้อมกับคำสั่งอื่น ๆ ไฟล์ฐานข้อมูลจะถูกสร้างขึ้นหากไม่มีข้อมูลใดถูกพบและเราจะเก็บไฟล์ไว้ในโฟลเดอร์ Documents เพื่อให้เราสามารถอ่านและเขียนข้อมูลได้

ต้อง "sqlite3"
ท้องถิ่น data_path = system.pathForFile ("data.db", system.DocumentsDirectory);
DB = sqlite3.open (data_path);

สังเกตว่าตัวแปร "db" ไม่ได้แปลเป็นภาษาท้องถิ่น เราได้ทำเช่นนี้เพื่อให้แน่ใจว่าเราสามารถเข้าถึงฐานข้อมูลได้ตลอดโครงการของเรา นอกจากนี้คุณยังสามารถสร้างเฉพาะไฟล์. lua สำหรับฟังก์ชันฐานข้อมูลทั้งหมดและเก็บฐานข้อมูลไว้ในไฟล์นั้น

ต่อไปเราต้องสร้างตารางฐานข้อมูลที่จะเก็บการตั้งค่าของเรา:

local sql = "สร้างตาราง IF NOT EXISTS settings (name, value)";
ฐานข้อมูล: exec (SQL);

คำสั่งนี้จะสร้างตารางการตั้งค่าของเรา สามารถเรียกใช้ได้ทุกครั้งที่โหลดแอปเนื่องจากหากตารางมีอยู่แล้วคำสั่งนี้จะไม่ทำอะไร คุณสามารถใส่ข้อความนี้ได้ตามที่เราได้ประกาศฐานข้อมูลหรือในฟังก์ชันที่ตั้งค่าแอปของคุณให้ทำงาน ข้อกำหนดหลักคือ (1) รันคำสั่งเหล่านี้ทุกครั้งที่มีการเปิดตัวแอปและ (2) ดำเนินการก่อนที่จะมีการเรียกหรือโหลดการตั้งค่า

ขั้นตอนที่สอง: บันทึกการตั้งค่าลงในฐานข้อมูล

setSetting ฟังก์ชัน (ชื่อค่า)
sql = "ลบการตั้งค่า WHERE name = '" .. ชื่อ .. "'";
db: exec (sql)

sql = "ตั้งค่า INSERT INTO (ชื่อค่า) VALUES ('" ..name .. "'," .. value .. ");";
db: exec (sql)
ปลาย

setSettingString ฟังก์ชัน (ชื่อค่า)
setSetting (ชื่อ " '.. ค่า ..'");
ปลาย

ฟังก์ชัน setSetting จะลบการตั้งค่าก่อนหน้าใด ๆ ที่บันทึกไว้ในตารางและแทรกค่าใหม่ของเรา จะทำงานร่วมกับทั้งจำนวนเต็มและสตริง แต่การบันทึกสตริงจะต้องใช้คำพูดเดียวรอบ ๆ ค่าดังนั้นเราจึงใช้ฟังก์ชัน setSettingString เพื่อทำสิ่งที่พิเศษสำหรับเรา

ขั้นตอนที่สาม: กำลังโหลดการตั้งค่าจากฐานข้อมูล

getSetting ฟังก์ชัน (ชื่อ)

local sql = "SELECT * FROM settings WHERE name = '" .. ชื่อ .. "'";
ค่าท้องถิ่น = -1;

สำหรับแถวใน db: nrows (sql) do
value = row.value;
ปลาย

ค่าตอบแทน;
ปลาย

getSettingString ฟังก์ชัน (ชื่อ)
local sql = "SELECT * FROM settings WHERE name = '" .. ชื่อ .. "'";
ค่าท้องถิ่น = '';

สำหรับแถวใน db: nrows (sql) do
value = row.value;
ปลาย

ค่าตอบแทน;
ปลาย

ดังที่กล่าวมาข้างต้นเราได้แบ่งฟังก์ชันออกเป็นสองเวอร์ชัน: หนึ่งสำหรับจำนวนเต็มและหนึ่งสำหรับสตริง เหตุผลหลักที่เราได้ทำนี้เพื่อให้เราสามารถเริ่มต้นได้ด้วยค่าที่ระบุถ้าไม่มีการตั้งค่าอยู่ในฐานข้อมูล ฟังก์ชัน getSetting จะส่งคืน -1 ซึ่งจะแจ้งให้เราทราบว่าการตั้งค่ายังไม่ได้บันทึกไว้ getSettingString จะส่งคืนสตริงที่ว่างเปล่า

ฟังก์ชัน getSettingString เป็นทางเลือกที่สมบูรณ์ ข้อแตกต่างระหว่างฟังก์ชัน getSetting และฟังก์ชัน getSetting ปกติคือสิ่งที่ถูกส่งคืนหากไม่มีสิ่งใดถูกค้นพบในฐานข้อมูล

ขั้นตอนที่สี่: ใช้ตารางการตั้งค่าของเรา

ตอนนี้เราทำงานหนักแล้วเราสามารถโหลดและบันทึกการตั้งค่าลงในฐานข้อมูลที่แปลโดยอัตโนมัติ ตัวอย่างเช่นเราสามารถปิดเสียงด้วยข้อความต่อไปนี้:

setSetting ( 'เสียง' เท็จ);

และเราสามารถใช้การตั้งค่าในฟังก์ชั่นส่วนกลางสำหรับการเล่นเสียง:

ฟังก์ชั่น playSound (soundID)
ถ้า (getSetting ('เสียง')) แล้ว
การเล่นเสียง (soundID)
ปลาย
ปลาย

หากต้องการเปิดเสียงอีกครั้งให้ตั้งค่าเสียงให้เป็นจริง:

setSetting ( 'เสียง' จริง);

ส่วนที่ดีเกี่ยวกับฟังก์ชันเหล่านี้คือคุณสามารถบันทึกสตริงหรือจำนวนเต็มลงในตารางการตั้งค่าและดึงข้อมูลเหล่านี้ได้อย่างง่ายดาย ช่วยให้คุณสามารถทำอะไรได้จากการบันทึกชื่อผู้เล่นเพื่อบันทึกคะแนนสูง

Corona SDK: วิธีเลเยอร์กราฟิก, ย้ายกราฟิกและนำกราฟิกไปด้านหน้า