メタテーブルを使って、クラスっぽいことをする

メタテーブルを使ってクラス化実装 PICO-8
メタテーブルを使ってクラス化実装

PICO-8は言語Lua使って、命令を書きます(機能制限あり)。

その中で「メタテーブルを使うと、クラスっぽい動作を実装することが出来る」ということですが、どう使うか わかりませんでした。

「メタテーブル」・・・なにか中二病を誘うような イカした名前。

で、ChatGPTに伺うと、例を出してクラス(っぽい)の定義とインスタンスの仕方を 教えてくれました。

今までは、基本のキャラクタテーブルを使い、そこをベースにして、必要な変数とその値、関数を加えていきました。

今回は、メタテーブルを使うのです。

先程の様に基本のテーブルを作っておいて、そこになかったら探しに行く参照先のテーブルを定義するのです。
例えば、

setmetatable(obj, { __index = proto })

と書くと、基本テーブルobjに無い変数と値や、関数がなければ、protoテーブルの中を参照するというものです。

私はそこで、objテーブルは素の空テーブルで、protoテーブル内に、基本フィールド(変数・値・関数)を指定しておいて、init関数で引数のキャラ名(3文字列)で種別のフィールドを設けるようにしています。

まだ 現在制作中のゲーム「Magic Line」には、2キャラ分のインスタンス化しかしていませんが、アイテムやラインマジックの火の玉などもインスタンス化して使えそうです。

そうすれば、トークンの削減にも繋がりそうです(今はトークン数の差は少ないですが、使う回数が増えれば、削減するトークン数は増えていきます、多分)。

コメント

タイトルとURLをコピーしました