忍者ブログ

神戸電子専門学校ゲームソフト学科の生徒が運営するGESのブログです。

   

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

スクリプト言語「Lua」 パート3 ~テーブル編~

色々とガタが来ている アッキーです
もう痛さが尋常じゃありません・・・
もう座ってるだけで辛い・・・

さて今回は「テーブル」をやります
「あれ?配列やるとか言ってなかったっけ?」
実はLuaには配列なんてものはありません
その代わりに「テーブル(連想配列)」というものがあります
クセはあるものの慣れれば非常に強力な機構です
ケツの痛みに耐えながらやりますよー(T_T)

拍手[0回]


とりあえずプログラム見ればわかるかもですね

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

NAME
TITLE
MAIL(非公開)
URL
EMOJI
Vodafone絵文字 i-mode絵文字 Ezweb絵文字
COMMENT
PASS(コメント編集に必須です)
SECRET
管理人のみ閲覧できます

ブログ内検索

最新コメント

[01/29 人面犬]
[10/01 8ch]
[09/12 uncle]
[09/10 某卒業生]
[06/07 uncle]

カレンダー

10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

テスト

Copyright ©  -- GESブログ --  All Rights Reserved
Design by CriCri / Photo by Geralt / powered by NINJA TOOLS / 忍者ブログ / [PR]