Skip to main content

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

Anonim

สิ่งหนึ่งที่เกือบทุกแอปและเกมมีเหมือนกันคือต้องเก็บและดึงข้อมูล แม้แต่เกมที่เรียบง่ายที่สุดก็สามารถใช้ 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 ( 'เสียง' จริง);

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