สิ่งหนึ่งที่เกือบทุกแอปและเกมมีเหมือนกันคือต้องเก็บและดึงข้อมูล แม้แต่เกมที่เรียบง่ายที่สุดก็สามารถใช้ SQLite เพื่อบันทึกหมายเลขเวอร์ชันแอปซึ่งสามารถใช้เพื่อรับประกันความเข้ากันได้เมื่อทำการอัปเกรดหรือตั้งค่าอย่างง่ายเช่นเปิดหรือปิดเสียงของเกม
ถ้าคุณไม่เคยทำงานอะไรมากกับฐานข้อมูลหรือใช้คุณลักษณะฐานข้อมูลใน Corona SDK ไม่ต้องกังวล เป็นกระบวนการที่ค่อนข้างตรงไปตรงมาด้วยพลังของ LUA และเครื่องมือฐานข้อมูล SQLite ที่ใช้ใน Corona SDK บทแนะนำนี้จะอธิบายขั้นตอนการสร้างตารางการตั้งค่าและทั้งเก็บและเรียกข้อมูลจากข้อมูล
โปรดทราบว่าเทคนิคนี้สามารถทำได้มากกว่าการจัดเก็บการตั้งค่าตามผู้ใช้ ตัวอย่างเช่นถ้าคุณมีเกมที่สามารถเล่นได้โดยใช้โหมดเกมที่แตกต่างกันเช่นโหมด "เรื่องราว" และโหมด "อาร์เคด" ตารางการตั้งค่านี้สามารถใช้เพื่อจัดเก็บโหมดปัจจุบันได้ ข้อมูลอื่น ๆ ที่คุณต้องการให้คงอยู่ต่อไปแม้ว่าผู้ใช้จะออกจากเกมและเปิดใช้งานอีกครั้ง
การเริ่มต้นฐานข้อมูลและการสร้างตารางการตั้งค่า
สิ่งแรกที่เราต้องทำก็คือประกาศไลบรารี SQLite และบอกแอปของเราว่าจะหาไฟล์ฐานข้อมูลที่ไหน สถานที่ที่ดีที่สุดในการใส่รหัสนี้เป็นสิทธิที่ด้านบนของไฟล์ main.lua พร้อมกับคำสั่งอื่น ๆ ไฟล์ฐานข้อมูลจะถูกสร้างขึ้นหากไม่มีข้อมูลใดถูกพบและเราจะเก็บไฟล์ไว้ในโฟลเดอร์ Documents เพื่อให้เราสามารถอ่านและเขียนข้อมูลได้
ต้อง "sqlite3" local data_path = system.pathForFile ("data.db", system.DocumentsDirectory); db = sqlite3.open (data_path);
สังเกตว่าตัวแปร "db" ไม่ได้แปลเป็นภาษาท้องถิ่น เราได้ทำเช่นนี้เพื่อให้แน่ใจว่าเราสามารถเข้าถึงฐานข้อมูลได้ตลอดโครงการของเรา นอกจากนี้คุณยังสามารถสร้างเฉพาะไฟล์. lua สำหรับฟังก์ชันฐานข้อมูลทั้งหมดและเก็บฐานข้อมูลไว้ในไฟล์นั้น
ต่อไปเราต้องสร้างตารางฐานข้อมูลที่จะเก็บการตั้งค่าของเรา:
local sql = "สร้างตาราง IF NOT EXISTS การตั้งค่า (ชื่อค่า)" db: exec (sql);
คำสั่งนี้จะสร้างตารางการตั้งค่าของเรา สามารถเรียกใช้ได้ทุกครั้งที่โหลดแอปเนื่องจากหากตารางมีอยู่แล้วคำสั่งนี้จะไม่ทำอะไร คุณสามารถใส่ข้อความนี้ได้ตามที่เราได้ประกาศฐานข้อมูลหรือในฟังก์ชันที่ตั้งค่าแอปของคุณให้ทำงาน ข้อกำหนดหลักคือ (1) รันคำสั่งเหล่านี้ทุกครั้งที่มีการเปิดตัวแอปและ (2) ดำเนินการก่อนที่จะมีการเรียกหรือโหลดการตั้งค่า
บันทึกการตั้งค่าไปยังฐานข้อมูล
setSetting (ชื่อ, ค่า) sql = "ลบจากการตั้งค่า WHERE name = '" .. ชื่อ .. "'"; db: exec (sql) sql = "ตั้งค่า INSERT INTO (ชื่อค่า) VALUES ('" ..name .. "'," .. value .. ");"; db: exec (sql) end
setSettingString (name, value) setSetting (name, "'" value .. "'") ท้ายสุด
ฟังก์ชั่นการตั้งค่าลบการตั้งค่าก่อนหน้าใด ๆ ที่บันทึกไว้ในตารางและแทรกค่าใหม่ของเรา จะทำงานร่วมกับทั้งจำนวนเต็มและสตริง แต่การบันทึกสตริงจะต้องใช้คำพูดเดียวรอบ ๆ ค่าดังนั้นเราจึงใช้ฟังก์ชัน setSettingString เพื่อทำสิ่งที่พิเศษสำหรับเรา
กำลังโหลดการตั้งค่าจากฐานข้อมูล
getSetting ฟังก์ชัน (ชื่อ)
local sql = "SELECT * FROM settings WHERE name = '" .. ชื่อ .. "'"; ค่าท้องถิ่น = -1;
สำหรับแถวใน db: nrows (sql) do value = row.value; ปลาย
ค่าตอบแทนสิ้น
getSettingString (ชื่อ) local sql = "SELECT * FROM การตั้งค่าชื่อ WHERE = '" .. ชื่อ .. "'"; ค่าท้องถิ่น = '';
สำหรับแถวใน db: nrows (sql) do value = row.value; ปลาย
ค่าตอบแทนสิ้น
ดังที่กล่าวมาข้างต้นเราได้แบ่งฟังก์ชันออกเป็นสองเวอร์ชัน: หนึ่งสำหรับจำนวนเต็มและหนึ่งสำหรับสตริง เหตุผลหลักที่เราได้ทำนี้เพื่อให้เราสามารถเริ่มต้นได้ด้วยค่าที่ระบุถ้าไม่มีการตั้งค่าอยู่ในฐานข้อมูล ฟังก์ชัน getSetting จะส่งคืน -1 ซึ่งจะแจ้งให้เราทราบว่าการตั้งค่ายังไม่ได้บันทึกไว้ getSettingString จะส่งคืนสตริงที่ว่างเปล่า
ฟังก์ชัน getSettingString เป็นทางเลือกที่สมบูรณ์ ข้อแตกต่างระหว่างฟังก์ชัน getSetting และฟังก์ชัน getSetting ปกติคือสิ่งที่ถูกส่งคืนหากไม่มีสิ่งใดถูกค้นพบในฐานข้อมูล
ใช้ตารางการตั้งค่าของเรา
ตอนนี้เราทำงานหนักแล้วเราสามารถโหลดและบันทึกการตั้งค่าลงในฐานข้อมูลที่แปลโดยอัตโนมัติ ตัวอย่างเช่นเราสามารถปิดเสียงด้วยข้อความต่อไปนี้:
setSetting ( 'เสียง' เท็จ);
และเราสามารถใช้การตั้งค่าในฟังก์ชั่นส่วนกลางสำหรับการเล่นเสียง:
ฟังก์ชั่น playSound (soundID) ถ้า (getSetting ('sound')) แล้วเล่นเสียง (soundID) endend
หากต้องการเปิดเสียงอีกครั้งให้ตั้งค่าเสียงให้เป็นจริง:
setSetting ( 'เสียง' จริง);
ส่วนที่ดีเกี่ยวกับฟังก์ชันเหล่านี้คือคุณสามารถบันทึกสตริงหรือจำนวนเต็มลงในตารางการตั้งค่าและดึงข้อมูลเหล่านี้ได้อย่างง่ายดาย ช่วยให้คุณสามารถทำอะไรได้จากการบันทึกชื่อผู้เล่นเพื่อบันทึกคะแนนสูง




