SQLiteを使用してゲームのデータと設定を保存する方法
ほぼすべてのアプリとゲームで共通しているのは、データの保存と検索の必要性です。 最もシンプルなゲームでもSQLiteを利用してアプリケーションのバージョン番号を保存することができます。これを使用すると、アップグレードを実行する際の互換性を確保したり、ゲームのサウンドをオン/オフするなどの簡単な設定を行うことができます。
コロナSDKでデータベースを使用したり、データベース機能を使用したりしたことがない人にとっては、心配はいりません。 LUAとCorona SDKで使用されるSQLiteデータベースエンジンの機能により、実際には比較的簡単なプロセスです。 このチュートリアルでは、設定テーブルを作成し、そのテーブルから情報を格納および取得するプロセスについて説明します。 iPadアプリの開発方法
また、この手法はユーザーベースの設定を保存すること以外にも使えることに注意してください。 たとえば、「ストーリー」モードや「アーケード」モードなどの異なるゲームモードを使用して再生できるゲームを持っている場合はどうなりますか? この設定テーブルは、現在のモードを保存するために使用できます。 または、ユーザーがゲームを終了して再起動しても、永続的なままにしたいデータの他の部分。
ステップ1:データベースの初期化と設定テーブルの作成
まず、SQLiteライブラリを宣言して、データベースファイルの場所をアプリに伝えます。 このコードを置くのに最適な場所は、main.luaファイルの一番上にあり、他のrequireステートメントと同じです。 データベースファイルが見つからない場合、データベースファイルが作成され、そのファイルを読み込み、書き込みできるようにドキュメントフォルダに保存します。
"sqlite3"が必要です
ローカルdata_path = system.pathForFile( "data.db"、system.DocumentsDirectory);
db = sqlite3.open(data_path);
"db"変数がどのようにローカライズされていないかに注目してください。 プロジェクト全体を通してデータベースにアクセスできるようにするためにこれを行いました。 すべてのデータベース関数に対して特定の.luaファイルを作成し、データベースをそのファイルにローカライズしておくこともできます。
次に、設定を保存するデータベーステーブルを作成する必要があります。
ローカルsql = "存在しない場合、テーブルを作成する設定(名前、値);"
db:exec(sql);
このステートメントは、設定テーブルを作成します。 テーブルが既に存在する場合、このステートメントは何もしないので、アプリケーションが読み込まれるたびに実行するのは大丈夫です。 このステートメントは、データベースを宣言した場所のすぐ下に置くことも、アプリを設定する関数の中で実行することもできます。 主な要件は、(1)アプリケーションが起動されるたびにこれらのステートメントを実行し、(2)設定をロードまたは保存する呼び出しの前にステートメントを実行することです。
ステップ2:設定をデータベースに保存する
関数setSetting(name、value)
sql = "DELETE FROM settings WHERE name = '" .. name .. "'";
db:exec(sql)
sql = "INSERT INTO設定(名前、値)VALUES( '" ..name .. "'、" .. value .. ");";
db:exec(sql)
終わり
関数setSettingString(name、value)
setSetting(name、 "'" .. value .. "'");
終わり
setSetting関数は、テーブルに保存されている以前の設定を削除し、新しい値を挿入します。 これは整数と文字列の両方で動作しますが、文字列を保存するには値を一重引用符で囲む必要があるため、setSettingString関数を使用して余分な作業を行いました。
ステップ3:データベースから設定をロードする
関数getSetting(name)
ローカルsql = "SELECT * FROMの設定WHERE name = '" .. name .. "'";
局所値= -1;
dbの行の場合:nrows(sql)do
value = row.value;
終わり
戻り値。
終わり
関数getSettingString(name)
ローカルsql = "SELECT * FROMの設定WHERE name = '" .. name .. "'";
ローカル値= '';
dbの行の場合:nrows(sql)do
value = row.value;
終わり
戻り値。
終わり
上記のように、関数を2つのバージョンに分割しました.1つは整数用、もう1つは文字列用です。 これを行った主な理由は、データベースに設定がない場合に特定の値で初期化できるようにすることです。 getSetting関数は、-1が返され、設定が保存されていないことがわかります。 getSettingStringは空の文字列を返します。
getSettingString関数は完全にオプションです。 通常のgetSetting関数との唯一の違いは、データベースに何も見つからない場合に返されるものです。
ステップ4:設定テーブルの使用
これで作業が簡単になりましたので、ローカライズされたデータベースに簡単に設定をロードして保存できます。 たとえば、次の文で音をミュートすることができます。
setSetting( 'sound'、false);
また、サウンドを再生するためのグローバルな機能の設定を利用することもできます。
function playSound(soundID)
if(getSetting( 'sound'))then
audio.play(soundID)
終わり
終わり
サウンドをオンに戻すには、サウンド設定をtrueに設定するだけです。
setSetting( 'sound'、true);
これらの関数の素晴らしい点は、文字列や整数を設定テーブルに保存して簡単に取得できることです。 これにより、プレイヤーの名前を保存することからハイスコアを保存することに至るまで何でもできるようになります。
コロナSDK:グラフィックのレイヤー、グラフィックスの移動、およびグラフィックの前面への移動方法