Skip to main content

コロナSDK(LUA / SQLite)にゲームデータをロードして保存する方法

State of Unreal | GDC 2019 | Unreal Engine (六月 2026)

State of Unreal | GDC 2019 | Unreal Engine (六月 2026)
Anonim

ほぼすべてのアプリとゲームで共通しているのは、データの保存と検索の必要性です。最もシンプルなゲームでもSQLiteを利用してアプリケーションのバージョン番号を保存することができます。これを使用すると、アップグレードを実行する際の互換性を確保したり、ゲームのサウンドをオン/オフするなどの簡単な設定を行うことができます。

コロナSDKでデータベースを使用したり、データベース機能を使用したりしたことがない人にとっては、心配はいりません。 LUAとCorona SDKで使用されるSQLiteデータベースエンジンの機能により、実際には比較的簡単なプロセスです。このチュートリアルでは、設定テーブルを作成し、そのテーブルから情報を格納および取得するプロセスについて説明します。

この手法は、ユーザーベースの設定を保存すること以外にも使用できます。たとえば、「ストーリー」モードや「アーケード」モードなどの異なるゲームモードを使用して再生できるゲームを持っている場合はどうなりますか?この設定テーブルは、現在のモードを保存するために使用できます。ユーザーがゲームを終了してもそれを再起動しても、永続的なままにしたいデータです。

データベースの初期化と設定テーブルの作成。

まず、SQLiteライブラリを宣言して、データベースファイルの場所をアプリに伝えます。このコードを置くのに最適な場所は、main.luaファイルの一番上にあり、他のrequireステートメントと同じです。データベースファイルが見つからない場合、データベースファイルが作成され、そのファイルを読み込み、書き込みできるようにドキュメントフォルダに保存します。

"sqlite3"が必要です。ローカルのdata_path = system.pathForFile( "data.db"、system.DocumentsDirectory); db = sqlite3.open(data_path);

"db"変数がどのようにローカライズされていないかに注目してください。プロジェクト全体を通してデータベースにアクセスできるようにするためにこれを行いました。すべてのデータベース関数に対して特定の.luaファイルを作成し、データベースをそのファイルにローカライズしておくこともできます。

次に、設定を保存するデータベーステーブルを作成する必要があります。

ローカルsql = "CREATE TABLEが存在しない場合、設定(名前、値);" db:exec(sql);

このステートメントは、設定テーブルを作成します。テーブルが既に存在する場合、このステートメントは何もしないので、アプリケーションが読み込まれるたびに実行するのは大丈夫です。このステートメントは、データベースを宣言した場所のすぐ下に置くことも、アプリを設定する関数の中で実行することもできます。主な要件は、(1)アプリケーションが起動されるたびにこれらのステートメントを実行し、(2)設定をロードまたは保存する呼び出しの前にステートメントを実行することです。

設定をデータベースに保存します。

関数setSetting(name、value)sql = "DELETE FROM settings WHERE name = '" .. name .. "'"; db:exec(sql)sql = "INSERT INTO設定(名前、値)VALUES( '" ..name .. "'、" .. value .. ");"; db:exec(sql)end

関数setSettingString(name、value)setSetting(name、 "'" .. value .. "'")); end

設定機能は、テーブルに保存されている以前の設定を削除し、新しい値を挿入します。これは整数と文字列の両方で動作しますが、文字列を保存するには値を一重引用符で囲む必要があるため、setSettingString関数を使用して余分な作業を行いました。

データベースから設定を読み込みます。

関数getSetting(name)

ローカルsql = "SELECT * FROMの設定WHERE name = '" .. name .. "'";局所値= -1;

dbの行の場合:nrows(sql)do value = row.value;終わり

戻り値;終了

関数getSettingString(name)local sql = "SELECT * FROMの設定WHERE name = '" .. name .. "'";ローカル値= '';

dbの行の場合:nrows(sql)do value = row.value;終わり

戻り値;終了

上記のように、関数を2つのバージョンに分割しました.1つは整数用、もう1つは文字列用です。これを行った主な理由は、データベースに設定がない場合に特定の値で初期化できるようにすることです。 getSetting関数は、-1が返され、設定が保存されていないことがわかります。 getSettingStringは空の文字列を返します。

getSettingString関数は完全にオプションです。通常のgetSetting関数との唯一の違いは、データベースに何も見つからない場合に返されるものです。

私たちの設定テーブルを使用する。

これで作業が簡単になりましたので、ローカライズされたデータベースに簡単に設定をロードして保存できます。たとえば、次の文で音をミュートすることができます。

setSetting( 'sound'、false);

また、サウンドを再生するためのグローバルな機能の設定を利用することもできます。

関数playSound(soundID)if(getSetting( 'sound'))then audio.play(soundID)endend

サウンドをオンに戻すには、サウンド設定をtrueに設定するだけです。

setSetting( 'sound'、true);

これらの関数の素晴らしい点は、文字列や整数を設定テーブルに保存して簡単に取得できることです。これにより、プレイヤーの名前を保存することからハイスコアを保存することに至るまで何でもできるようになります。