Τρόπος φόρτωσης και αποθήκευσης δεδομένων παιχνιδιών στο SDK Corona

Πώς να χρησιμοποιήσετε το SQLite για την αποθήκευση δεδομένων και ρυθμίσεων παιχνιδιών

Ένα πράγμα που σχεδόν κάθε εφαρμογή και παιχνίδι έχει κοινό είναι η ανάγκη αποθήκευσης και ανάκτησης δεδομένων. Ακόμα και το πιο απλό παιχνίδι μπορεί να χρησιμοποιήσει το SQLite για να αποθηκεύσει τον αριθμό έκδοσης της εφαρμογής, ο οποίος μπορεί να χρησιμοποιηθεί για να διασφαλιστεί η συμβατότητα κατά την εκτέλεση αναβαθμίσεων ή απλές ρυθμίσεις όπως ενεργοποίηση ή απενεργοποίηση του ήχου του παιχνιδιού.

Εάν δεν έχετε κάνει ποτέ πολλά δουλειά με βάσεις δεδομένων ή χρησιμοποιείτε τις λειτουργίες της βάσης δεδομένων στο SDK Corona , μην ανησυχείτε. Είναι στην πραγματικότητα μια σχετικά απλή διαδικασία χάρη στη δύναμη του LUA και του μηχανισμού βάσης δεδομένων SQLite που χρησιμοποιείται στο Corona SDK. Αυτό το σεμινάριο θα περπατήσει μέσα από τη διαδικασία δημιουργίας πίνακα ρυθμίσεων και αποθήκευσης και ανάκτησης πληροφοριών από αυτό. Πώς να αναπτύξετε εφαρμογές iPad.

Επίσης, λάβετε υπόψη ότι αυτή η τεχνική μπορεί να υπερβεί την αποθήκευση των ρυθμίσεων που βασίζονται σε χρήστες. Για παράδειγμα, τι γίνεται αν έχετε ένα παιχνίδι το οποίο μπορεί να παιχτεί χρησιμοποιώντας διαφορετικές λειτουργίες παιχνιδιού όπως η λειτουργία "ιστορία" και "arcade". Αυτός ο πίνακας ρυθμίσεων μπορεί να χρησιμοποιηθεί για την αποθήκευση της τρέχουσας λειτουργίας. Ή οποιοδήποτε άλλο κομμάτι δεδομένων που θέλετε να παραμείνετε επίμονο ακόμα και αν ο χρήστης κλείσει από το παιχνίδι και τον επαναφέρει ξανά.

Βήμα πρώτο: Αρχικοποίηση της βάσης δεδομένων και δημιουργία πίνακα ρυθμίσεων

Το πρώτο πράγμα που πρέπει να κάνουμε είναι να δηλώσουμε τη βιβλιοθήκη SQLite και να πούμε στην εφαρμογή μας πού θα βρει το αρχείο βάσης δεδομένων. Το καλύτερο μέρος για να βάλει αυτόν τον κώδικα είναι ακριβώς στην κορυφή του αρχείου main.lua μαζί με τις άλλες απαιτεί δηλώσεις. Το αρχείο βάσης δεδομένων θα δημιουργηθεί εάν δεν υπάρχει κανένας και θα το αποθηκεύσουμε στο φάκελο "Έγγραφα", ώστε να μπορέσουμε να διαβάσουμε από αυτό και να γράψουμε σε αυτό.

απαιτούν "sqlite3"
τοπική data_path = system.pathForFile ("data.db", system.DocumentsDirectory);
db = sqlite3.open (path_path);

Παρατηρήστε πώς η μεταβλητή "db" δεν εντοπίζεται. Το κάναμε αυτό για να μπορέσουμε να έχουμε πρόσβαση στη βάση δεδομένων σε όλο το έργο μας. Μπορείτε επίσης να δημιουργήσετε ένα συγκεκριμένο αρχείο .lua για όλες τις λειτουργίες της βάσης δεδομένων και να διατηρήσετε τη βάση δεδομένων localized σε αυτό το αρχείο.

Στη συνέχεια, πρέπει να δημιουργήσουμε τον πίνακα βάσεων δεδομένων που θα αποθηκεύει τις ρυθμίσεις μας:

local sql = "ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑ ΕΑΝ ΔΕΝ ΥΠΑΡΧΟΥΝ ρυθμίσεις (όνομα, τιμή);"
db: exec (sql);

Αυτή η δήλωση δημιουργεί τον πίνακα ρυθμίσεών μας. Είναι εντάξει να το εκτελείτε κάθε φορά που φορτώνεται η εφαρμογή, επειδή αν ο πίνακας υπάρχει ήδη, αυτή η δήλωση δεν θα κάνει τίποτα. Μπορείτε να βάλετε αυτήν τη δήλωση ακριβώς κάτω από το σημείο όπου δηλώσαμε τη βάση δεδομένων ή τη λειτουργία που θέτει σε λειτουργία την εφαρμογή σας. Η βασική απαίτηση είναι (1) να εκτελούνται αυτές οι δηλώσεις κάθε φορά που εκκινείται η εφαρμογή και (2) να εκτελείται πριν από οποιεσδήποτε κλήσεις για τη φόρτωση ή αποθήκευση ρυθμίσεων.

Βήμα δεύτερο: Αποθήκευση ρυθμίσεων στη βάση δεδομένων

set set (όνομα, τιμή)
sql = "ΔΙΑΓΡΑΦΗ από τις ρυθμίσεις WHERE name = '" .. name .. "'";
db: exec (sql)

sql = "ΕΙΣΑΓΩΓΗ ΣΕ ΡΥΘΜΙΣΕΙΣ (όνομα, τιμή) ΤΙΜΕΣ (" .. όνομα .. "," .. αξία .. ");";
db: exec (sql)
τέλος

συνάρτηση setSettingString (όνομα, τιμή)
setSetting (όνομα, "'" .. αξία .. "'");
τέλος

Η συνάρτηση setSetting διαγράφει τυχόν προηγούμενες ρυθμίσεις που έχουν αποθηκευτεί στον πίνακα και εισάγει τη νέα μας τιμή. Θα λειτουργήσει τόσο με ακεραίους όσο και με συμβολοσειρές, αλλά η αποθήκευση μιας συμβολοσειράς απαιτεί μεμονωμένα εισαγωγικά γύρω από την τιμή, οπότε έχουμε χρησιμοποιήσει τη συνάρτηση setSettingString για να κάνουμε αυτό το επιπλέον κομμάτι εργασίας για εμάς.

Βήμα τρίτο: Φόρτωση ρυθμίσεων από τη βάση δεδομένων

λειτουργία getSetting (όνομα)

τοπικό sql = "SELECT * ΑΠΟ τις ρυθμίσεις WHERE name = '" .. name .. "'";
τοπική τιμή = -1.

για σειρά σε db: nrows (sql) κάνει
value = row.value;
τέλος

απόδοση;
τέλος

λειτουργία getSettingString (όνομα)
τοπικό sql = "SELECT * ΑΠΟ τις ρυθμίσεις WHERE name = '" .. name .. "'";
τοπική τιμή = '';

για σειρά σε db: nrows (sql) κάνει
value = row.value;
τέλος

απόδοση;
τέλος

Όπως παραπάνω, έχουμε διακόψει τις λειτουργίες σε δύο εκδόσεις: μία για ακέραιους αριθμούς και μία για συμβολοσειρές. Ο κύριος λόγος για τον οποίο έχουμε κάνει αυτό είναι να μπορέσουμε να τις αρχικοποιήσουμε με συγκεκριμένες τιμές αν δεν υπάρχει καμία ρύθμιση στη βάση δεδομένων. Η συνάρτηση getSetting θα επιστρέψει ένα -1, το οποίο θα μας ενημερώσει ότι η ρύθμιση δεν έχει αποθηκευτεί. Το getSettingString θα επιστρέψει μια κενή συμβολοσειρά.

Η λειτουργία getSettingString είναι εντελώς προαιρετική. Η μόνη διαφορά μεταξύ αυτής και της κανονικής συνάρτησης getSetting είναι αυτό που επιστρέφεται αν δεν βρεθεί τίποτα στη βάση δεδομένων.

Βήμα τέσσερα: Χρησιμοποιώντας τον πίνακα ρυθμίσεών μας

Τώρα που έχουμε κάνει τη σκληρή δουλειά, μπορούμε εύκολα να φορτώσουμε και να αποθηκεύσουμε ρυθμίσεις σε μια τοπική βάση δεδομένων. Για παράδειγμα, θα μπορούσαμε να σβήσουμε τον ήχο με την ακόλουθη δήλωση:

setSetting ('ήχος', ψευδή);

Και θα μπορούσαμε να χρησιμοποιήσουμε τη ρύθμιση σε μια παγκόσμια λειτουργία για την αναπαραγωγή ήχων:

λειτουργία playSound (soundID)
αν (getSetting ('ήχος')) τότε
audio.play (soundID)
τέλος
τέλος

Για να ενεργοποιήσετε ξανά τον ήχο, απλά ρυθμίσατε τη ρύθμιση ήχου:

setSetting ('ήχος', true);

Το ωραίο μέρος για αυτές τις λειτουργίες είναι ότι μπορείτε να αποθηκεύσετε συμβολοσειρές ή ακέραιους αριθμούς στον πίνακα ρυθμίσεων και να τις ανακτήσετε εύκολα. Αυτό σας επιτρέπει να κάνετε οτιδήποτε από την αποθήκευση του ονόματος ενός παίκτη στην αποθήκευση του υψηλού βαθμού του.

Corona SDK: Πώς να Layer Graphics, Μετακίνηση Γραφικών και Φέρτε γραφικά στο μπροστινό μέρος