備忘録

プログラムやゲーム関連に関すること

【Lua】

【Lua】モジュール

モジュールを記載したファイルをファイル名のオブジェクト(モジュール) としてグローバル変数(_G)に設定し、パッケージに読み込みしたことを伝える require関数からファイルを読み込み、モジュールからオブジェクトを生成する 下記のモジュールの機能は…

【Lua】継承

継承には、メタテーブルである__indexフィールド(子)に親を設定する 子がメンバを呼び出したときにメタテーブルを検索してメンバがなければ 親の持つメタテーブルを参照する test.lua -->既定クラスを定義する Base = {} -->生成関数を定義する function B…

【Lua】プライベートメンバを持つクラス

ローカル内に自身のテーブル(メンバ)を定義して、 そのテーブルに対する公開メソッドとなるテーブル(インターフェイス)を返却する Luaのオブジェクトの基本設計ではプライベート機構は用意されていない これは、オブジェクトの汎用性(テーブル)を意図…

【Lua】行列

行列を多次元配列を使用して実装する test.lua -- 3x3の行列を生成する row = 3 -- 行 column = 3 -- 列 matrix = {} for i = 1, row do matrix[i] = {} for j = 1, column do matrix[i][j] = 0 end end test.cpp #include <iostream> #include <lua.hpp> using namespace std; </lua.hpp></iostream>…

【Lua】クロージャ

以下の関数は呼び出し毎に値を加算して返却する 返却する値は無名関数であり、counter を呼び出し時に ローカル変数 i を定義してその値を無名関数内で参照している レキシカルスコープで非ローカル変数を参照する概念をクロージャという また、インスタンス…

【Lua】Tips

豆知識をこの記事に随時追加する。 ローカル変数のスコープについて グローバル変数とローカル変数へのアクセス速度は後者が速く、 スコープを抜けるとガベージコレクションが働きデータの保守性が上がる ローカル変数を使用する場合は必ずスコープの範囲で…

【Lua】C++環境の関数をLuaで使用する

参考:その5 LuaからC言語の関数を呼び出す test.cpp #include <iostream> #include <lua.hpp> void test() { // Luaステートを生成する auto L = luaL_newstate(); // Luaに登録する関数(線形補完)を定義する // Luaに登録できる関数は lua_CFunction と同じ型でなければな</lua.hpp></iostream>…

【Lua】LuaでC++のクラスを表現する

基本的なLuaライブラリは過去記事を参照。 参考:その4 会得必須!Luaの真髄「テーブル」 test.cpp #include <iostream> #include <lua.hpp> void test() { auto L = luaL_newstate(); luaL_openlibs(L); if (luaL_dofile(L, "test.lua")) { std::cout << lua_tostring(L, lua_</lua.hpp></iostream>…

【Lua】C++環境からコルーチンを実行する

test.cpp #include <iostream> #include <lua.hpp> void testCoroutine() { // Luaステートを生成する auto L = luaL_newstate(); // Luaステートに全てのライブラリを使用可能にする // 個別でライブラリを使用可能にするには luaL_requiref 関数を参照 luaL_openlibs(L); // L</lua.hpp></iostream>…

【Lua】コルーチン

Luaコード内でコルーチンを生成して実行する -- コルーチンを生成する -- ループ数を表示し、中断数を返却する local co = coroutine.create( function(x) -- 直接代入するので無名関数 for i = 0, x do print("loop count: " .. i) coroutine.yield("yield …

【Lua】基本処理

Luaの基本的な処理をLuaコードにてメモ -- 関係演算子 < > <= >= == ~= -- 論理演算子 and or not -- 単項演算子や三項演算子はない -- if 条件分岐 num = 10 if num <= 50 then print("under 50") elseif num <= 100 then print("under 100") else print("o…

【Lua】導入編 コマンドプロンプト

実行ファイルのダウンロード 下記URLから適当なものを選択する。(導入編 Visual Studioと同じ) 最新バージョンを選択し、Tools Executable をダウンロードする。 適当なディレクトリに解凍する。 解凍内容は、luaXX.exe、luacXX.exe、wluaXX.exe、luaXX.dl…

【Lua】スタック

スタックを把握する為に以下ソースコードをメモする。 詳しいことは、以下参考URLから参照。参考: その2 Luaスクリプト事始め #include <iostream> #include <lua.hpp> // スタック確認 void printStack(lua_State* L) { // スタック数を取得 const int num = lua_gettop(L); i</lua.hpp></iostream>…

【Lua】導入編 Visual Studio

下記URLから適当なものをダウンロードする。 当環境ではVC++での使用を目的とするので、VisualStudioと互換のある Visual C++ 2005 Compatible の最新バージョンである Windows Libraries をダウンロードする。 解凍先は、解りやすいようにC直下のluaフォル…