របៀបផ្ទុកនិងរក្សាទុកទិន្នន័យហ្គេមនៅក្នុង Corona SDK

របៀបប្រើ SQLite ដើម្បីរក្សាទុកទិន្នន័យហ្គេមនិងការកំណត់

រឿងមួយស្ទើរតែគ្រប់កម្មវិធីនិងហ្គេមមានដូចគ្នាគឺតម្រូវការរក្សាទុកនិងទាញយកទិន្នន័យ។ សូម្បីតែហ្គេមសាមញ្ញបំផុតក៏អាចប្រើ SQLite ដើម្បីរក្សាទុកលេខកំណែកម្មវិធីដែលអាចត្រូវបានប្រើដើម្បីធានាបាននូវភាពឆបគ្នាពេលធ្វើសកម្មភាពការដំឡើងឬការកំណត់សាមញ្ញដូចជាបើកឬបិទសម្លេងរបស់ហ្គេម។

ប្រសិនបើអ្នកមិនធ្លាប់ធ្វើការងារច្រើនជាមួយមូលដ្ឋានទិន្នន័យឬប្រើប្រាស់លក្ខណៈពិសេសនៃមូលដ្ឋានទិន្នន័យនៅក្នុង Corona SDK ទេកុំបារម្ភ។ វាពិតជាដំណើរការដោយត្រង់ដោយសារតែថាមពលរបស់ LUA និងម៉ាស៊ីនមូលដ្ឋានទិន្នន័យ SQLite ប្រើក្នុង Corona SDK ។ ការបង្រៀននេះនឹងដើរឆ្លងកាត់ដំណើរការនៃការបង្កើតតារាងការកំណត់និងការរក្សាទុកនិងទាញយកព័ត៌មានពីវា។ តើធ្វើដូចម្តេចដើម្បីអភិវឌ្ឍកម្មវិធីរបស់ iPad ។

សូមចងចាំផងដែរថាបច្ចេកទេសនេះអាចលើសពីការរក្សាទុកការកំណត់ផ្អែកលើអ្នកប្រើ។ ឧទាហរណ៍អ្វីដែលប្រសិនបើអ្នកមានល្បែងដែលអាចលេងដោយប្រើរបៀបលេងខុសៗគ្នាដូចជារបៀប "រឿងរ៉ាវ" និង "របៀបលេង" ។ តារាងការកំណត់នេះអាចត្រូវបានប្រើដើម្បីរក្សាទុករបៀបបច្ចុប្បន្ន។ ឬបំណែកផ្សេងទៀតនៃទិន្នន័យដែលអ្នកចង់នៅតែមានជានិច្ចទោះបីជាអ្នកប្រើឈប់ចេញពីហ្គេមហើយរឺក៏បន្តវាក៏ដោយ។

ជំហានទីមួយ: ការចាប់ផ្តើមមូលដ្ឋានទិន្នន័យនិងការបង្កើតតារាងការកំណត់

រឿងដំបូងដែលយើងត្រូវធ្វើគឺប្រកាសបណ្ណាល័យ SQLite ហើយប្រាប់កម្មវិធីរបស់យើងដែលត្រូវរកឯកសារមូលដ្ឋានទិន្នន័យ។ កន្លែងដែលល្អបំផុតដើម្បីដាក់លេខកូដនេះគឺនៅខាងស្ដាំនៃឯកសារ main.lua រួមជាមួយនឹងឯកសារផ្សេងទៀតដែលត្រូវការសេចក្តីថ្លែងការណ៍។ ឯកសារមូលដ្ឋានទិន្នន័យនឹងត្រូវបានបង្កើតប្រសិនបើគ្មានត្រូវបានរកឃើញហើយយើងនឹងរក្សាទុកវានៅក្នុងថតឯកសារដើម្បីឱ្យយើងអាចអានវាហើយសរសេរទៅវាបាន។

ទាមទារ "sqlite3"
data_path មូលដ្ឋាន = system.pathForFile ("data.db", system.DocumentsDirectory);
db = sqlite3.open (data_path);

សូមកត់សម្គាល់អំពីរបៀបដែលអថេរ "db" មិនត្រូវបានធ្វើមូលដ្ឋានីយកម្ម។ យើងបានធ្វើដូច្នេះដើម្បីប្រាកដថាយើងអាចចូលប្រើមូលដ្ឋានទិន្នន័យនៅទូទាំងគម្រោងរបស់យើង។ អ្នកក៏អាចបង្កើតឯកសារ .lua ជាក់លាក់មួយសម្រាប់មុខងារមូលដ្ឋានទិន្នន័យទាំងអស់និងរក្សាទុកមូលដ្ឋានទិន្នន័យទៅឯកសារនោះ។

បន្ទាប់មកយើងត្រូវបង្កើតតារាងមូលដ្ឋានទិន្នន័យដែលនឹងរក្សាទុកការកំណត់របស់យើង:

sql មូលដ្ឋាន = "បង្កើតតារាងប្រសិនបើមិនបានកំណត់ការកំណត់ (ឈ្មោះ, តម្លៃ);"
db: exec (sql);

សេចក្តីថ្លែងការណ៍នេះបង្កើតតារាងការកំណត់របស់យើង។ វាមិនអីទេក្នុងការដំណើរការវារាល់ពេលផ្ទុកកម្មវិធីពីព្រោះប្រសិនបើតារាងមានរួចហើយសេចក្តីថ្លែងការណ៍នេះនឹងមិនធ្វើអ្វីទេ។ អ្នកអាចដាក់សេចក្តីថ្លែងនេះនៅក្រោមកន្លែងដែលយើងបានប្រកាសមូលដ្ឋានទិន្នន័យឬនៅក្នុងមុខងារដែលរៀបចំកម្មវិធីរបស់អ្នកដើម្បីដំណើរការ។ តម្រូវការចម្បងគឺ (1) អនុវត្តសេចក្តីថ្លែងទាំងនោះរាល់ពេលដែលកម្មវិធីត្រូវបានចាប់ផ្តើមហើយ (2) ដំណើរការវាមុនពេលការហៅទូរស័ព្ទដើម្បីផ្ទុកឬរក្សាទុកការកំណត់។

ជំហានទីពីរ: ការរក្សាទុកការកំណត់ទៅមូលដ្ឋានទិន្នន័យ

មុខងារ setSetting (ឈ្មោះ, តម្លៃ)
sql = "DELETE FROM settings WHERE name = '" .. .. .. .. "';
db: exec (sql)

sql = "បញ្ចូល INSERT INTO (ឈ្មោះ, តម្លៃ) VALUES ('" ..name .. ' ', ".. .. .. "); ";
db: exec (sql)
បញ្ចប់

function setSetting (ឈ្មោះ, តម្លៃ)
setSetting (ឈ្មោះ, តម្លៃ '' ".. .. " '");
បញ្ចប់

មុខងារ setSetting លុបរាល់ការកំណត់ពីមុនដែលបានរក្សាទុកទៅក្នុងតារាងហើយបញ្ចូលតម្លៃថ្មីរបស់យើង។ វានឹងធ្វើការជាមួយចំនួនគត់និងខ្សែអក្សរប៉ុន្តែការរក្សាទុកខ្សែអក្សរត្រូវការសញ្ញាសម្រង់មួយនៅជុំវិញតម្លៃដូច្នេះយើងបានប្រើមុខងារ setSettingString ដើម្បីបំពេញការងារបន្ថែមសម្រាប់យើង។

ជំហានទីបី: កំពុងផ្ទុកការកំណត់ពីឃ្លាំងទិន្នន័យ

មុខងារ getSetting (ឈ្មោះ)

local sql = "SELECT * FROM settings WHERE name = '។ .. .. .. .. ' ';
តម្លៃមូលដ្ឋាន = -1;

សម្រាប់ជួរដេកក្នុង db: nrows (sql) ធ្វើ
តម្លៃ = ro.value;
បញ្ចប់

តម្លៃត្រឡប់មកវិញ
បញ្ចប់

មុខងារ getSettingString (ឈ្មោះ)
local sql = "SELECT * FROM settings WHERE name = '។ .. .. .. .. ' ';
តម្លៃមូលដ្ឋាន = '';

សម្រាប់ជួរដេកក្នុង db: nrows (sql) ធ្វើ
តម្លៃ = ro.value;
បញ្ចប់

តម្លៃត្រឡប់មកវិញ
បញ្ចប់

ដូចដែលខាងលើយើងបានបែកមុខងារទៅជាកំណែពីរ: មួយសម្រាប់លេខគត់និងមួយសម្រាប់ខ្សែអក្សរ។ មូលហេតុចំបងដែលយើងបានធ្វើដូច្នេះគឺយើងអាចចាប់ផ្ដើមពួកវាជាមួយតម្លៃជាក់លាក់ប្រសិនបើគ្មានការកំណត់នៅក្នុងមូលដ្ឋានទិន្នន័យទេ។ អនុគមន៍ getSetting នឹងត្រឡប់ -1 ដែលនឹងអនុញ្ញាតឱ្យយើងដឹងថាការកំណត់មិនត្រូវបានរក្សាទុក។ getSettingString នឹងត្រឡប់ខ្សែអក្សរទទេមួយ។

មុខងារ getSettingString គឺស្រេចចិត្តទាំងស្រុង។ ភាពខុសគ្នាតែមួយគត់រវាងវានិងអនុគមន៍ getSetting ធម្មតាគឺជាអ្វីដែលត្រូវបានត្រឡប់ប្រសិនបើគ្មានអ្វីដែលត្រូវបានរកឃើញនៅក្នុងមូលដ្ឋានទិន្នន័យ។

ជំហានទីបួន: ការប្រើតារាងការកំណត់របស់យើង

ឥឡូវនេះយើងមានការខិតខំប្រឹងប្រែងយ៉ាងហោចណាស់យើងអាចផ្ទុកនិងរក្សាទុកការកំណត់បានយ៉ាងងាយស្រួលទៅក្នុងទិន្នន័យមូលដ្ឋាន។ ឧទាហរណ៍យើងអាចបិទសម្លេងជាមួយនឹងសេចក្តីថ្លែងការណ៍ដូចខាងក្រោម:

setSetting ('សំឡេង', មិនពិត);

ហើយយើងអាចប្រើការកំណត់នៅក្នុងមុខងារជាសកលសម្រាប់ការចាក់សំលេង:

មុខងារ playSound (soundID)
ប្រសិនបើ (getSetting ('សំឡេង')) បន្ទាប់មក
audio.play (soundID)
បញ្ចប់
បញ្ចប់

ដើម្បីបើកសំឡេងឡើងវិញយើងគ្រាន់តែកំណត់ការកំណត់សម្លេងទៅពិត:

setSetting ('សំឡេង' ពិត);

ផ្នែកដ៏ល្អមួយអំពីមុខងារទាំងនេះគឺអ្នកអាចរក្សាទុកខ្សែអក្សរឬចំនួនគត់ទៅតារាងកំណត់ហើយទាញយកវាយ៉ាងងាយស្រួល។ នេះអនុញ្ញាតឱ្យអ្នកធ្វើអ្វីគ្រប់យ៉ាងពីការរក្សាទុកឈ្មោះរបស់អ្នកលេងដើម្បីរក្សាទុកពិន្ទុខ្ពស់របស់ពួកគេ។

Corona SDK: តើធ្វើដូចម្តេចដើម្បីស្រទាប់ក្រាហ្វិក, ផ្លាស់ទីក្រាហ្វិកនិងនាំយកក្រាហ្វិកទៅខាងមុខ