とりあえずプログラム見ればわかるかもですね
Test.lua
--テーブルを作る
Array = {}
--これでテーブル宣言終了
--テーブルはすべて「1」から始まる
--混乱しやすいので注意!!
Array[ 1 ] = 10
--なんと動的配列仕様なので、前もって確保しておく必要がない
--こんなふうにするとどうなるかな?
--残念ながら[2]を入れない限り表示されません
Array[ 3 ] = 10
--じゃあ繰り返し文で中身を参照するにはどうするか?
--「#」を使えばそのテーブルの大きさを知ることができる
for i = 1, #Array
do
print( Array[ i ] )
end
結果
10
普通の配列を使う分にはこれで十分だと思います
おそらくコメント見ればだいたい分かると思うので次の解説に行きます
おそらくゲーム作りにおいて構造体(クラス)は必要なものだと思います
次はそんなプログラムを書いてみます
Test.lua
--テーブルを構造体(クラス)みたいに宣言し、使ってみる
--この時点でも「Table」という変数ができている
--連続でメンバ宣言するなら「,」を忘れない
Table =
{
--メンバ変数
m_Value =
nil,
--メンバ関数(こんなこともできます)
--最初の引数に「this」を渡すのがミソです
--値設定
SetValue =
function( this, value )
this.m_Value = value
end,
--描画
PrintValue =
function( this )
print(
"このテーブルの値は「"..this.m_Value..
"」です" )
end
}
--「Table」を配列にしていく
TableArray = {}
--5つ作る
for i = 1, 5
do
--「Table」にすればうまくいくように見えるが残念ながら無理
TableArray[ i ] = {}
--「メタテーブル」という機構を使って内容を作る
--これはこのまま覚えてしまうのがいいかな
setmetatable( TableArray[ i ], { __index = Table } )
--試しに値を入れておく
TableArray[ i ].m_Value = 10 * i
--TableArray[ i ]:SetValue( 10 * i ) --←これでも同じ
end
-- 表示していく
for i = 1, #TableArray
do
--print( "TableArray[ "..i.." ].m_Value = "..TableArray[ i ].m_Value )
TableArray[ i ]:PrintValue()
--メンバ関数としてアクセスするときは「:」を使う
end
結果
このテーブルの値は「10」です
このテーブルの値は「20」です
このテーブルの値は「30」です
このテーブルの値は「40」です
このテーブルの値は「50」です
以上が構造体(クラス)みたいに使う方法です
ところどころわかりにくいですよね
なので少しだけ解説していきますね
まず
C/C++と違って構造体の「宣言」という概念が無いです
作ってしまえばそれが「実体」となります
なので
「宣言みたいなこと」をして「複製」する事によって構造体のように使えます
まどろっこしいですが、そうするしかありません
上記のように擬似的にクラスのようにも扱えますが、あまり強固なものではありません
なので実際には構造体のようにメンバ変数だけでテーブルを作るのが望ましいでしょう
さて、ようやく長かったLuaの基礎中の基礎が終わりました
次はいよいよ「C/C++との連携」をやってみます
相変わらず長くてすいません
わからない所、不明な所があればメールかコメント下さい^^
大変お疲れ様です
PR
COMMENT