話を整理しておきましょう。LÖVE(Love2D)自体は「画像表示とかの機能があるソフト」で、その機能を引き出すための言語が Lua です。
内部を詳しく見たわけではありませんが、Love2D側に「画像表示」「キー入力受付」などの機能があって、
それを Lua言語で呼び出して使用する、といった仕掛けになっているものと思われます。
それから念のために申し添えておくと、Luaというのは独立したスクリプト言語です。
さまざまなシステムに組み込んで使用できるという特徴があります。
で、世の中には操作用のスクリプト言語としてLuaを採用しているシステムが多数存在しており、
LÖVE(Love2D)もそうしたシステムの一つ、ということです。
ついでに蛇足ながら、愛するあなたのためにもう一度繰り返しておくと、『Live2D』とは関係ありませんっっ!!
で、Love2Dを扱うには Lua言語の知識が必要になるわけですが…… Lua自体を詳しくお勉強しようとすると命がいくつあっても足りません。 また、プログラミング自体のイロハについても、ここで基礎から解説していたら原稿用紙ン万枚の大長編になってしまいます。
というわけで、プログラミングの「プ」の字ぐらいはご存知だけど Lua はオラちょっとよくわがんね、というカンジのお友達を想定して、 今回の動画作成の企画に必要な機能だけ、超高速で土煙巻き上げながらババッと解説していきます。 「このぐらい既に存じ上げてるぜ!俺様をナメてもらっては困るぜ!」という頼もしいお友達は、ここは元気にすっ飛ばしてね。
以下のサンプルソースを main.lua というファイル名で保存し、Love2D上で実行することができます。 なお、またも繰り返しになりますが、ここで紹介するのはLua言語自体の仕様です。Love2Dの機能ではありません。 実行環境として Love2Dを使う想定ではありますが、Love2Dの機能を使っているというわけではありません。 (Love2D の機能と Lua言語自体の仕様は分けて考えたい。そんなお年頃)
こう書いてコマンドプロンプトで実行すると、
print ("来てます。")
end
aaaaa()
こうなるよ、
↓
ちなみにこのとき、以下のような真っ黒なウィンドウが同時に出ていることと思います。
これは Love2Dが表示しているウィンドウですね。Love2D自体の機能は使っていないので真っ黒なままということです。
↓
こう書いたら、
print ("来てます。")
end
x()
こうなるよ。
↓
こう書いたら、
if ( a > 5 ) then
print ("( ^ o^)ノ")
else
print ("ヽ(^o ^ )")
end
こうなるよ。
↓
こう書いたら、
print ( tableTest[1] )
print ( tableTest[2] )
print ( tableTest[3] )
print ( "要素数:"..#tableTest )
こうなるよ
添字は「1」から始まります。プログラマは「0」から数え始めるという常識を打ち破る新機軸。これだから Luaはヤメられませんね。
Luaの「テーブル」は、配列や連想配列や構造体やオブジェクトをまぜこぜにしたような愉快なお友達となっているみたいで、 「配列!」と言い切ってしまうとエラい人に怒られてしまいそうですよ、とは申し添えておきます。びくびく。
急にニッチな感じになって参りましたが、必ず必要になる処理のハズなのに調べてもスバリな方法が出てこなかったので、ここで一応の方法を紹介しておきます。
Lua のテーブルは連想配列としても使用することができます。そのキーを指定してエントリーを削除する方法です(table.remove は連想配列には使えないっぽい)。
結論を言うと、値として nil を代入すると消えたことになるようです。
ただし、Luaの正確な仕様であることを確認はできたわけではない、とは申し添えておきます。(それを言い出したら他のもかな?)
例えばこう書いたら、
tableTest['key1'] = 'value1'
tableTest['key2'] = 'value2'
tableTest['key3'] = 'value3'
-- この時点での内容を確認
for key, value in pairs(tableTest) do
print (key..":"..value)
end
print ( '\nkey2 を削除します\n' )
tableTest['key2'] = nil
-- 削除されているかどうかを確認
for key, value in pairs(tableTest) do
print (key..":"..value)
end
こうなります↓
一応の典拠はこちらです:
How to remove a lua table entry by its key? - Stack Overflow -
こう書いたら、
-- クラス定義
---------------------------------------------------
ClassTest = {}
ClassTest.new = function (id)
local this = {}
this.id = id
this.value = 0
this.setValue = function(self, value)
self.value = value
end
this.execute = function(self)
print("MyID:"..self.id)
print("value:"..self.value)
end
return this
end
---------------------------------------------------
-- 使ってみるテスト
---------------------------------------------------
obj1 = ClassTest.new("o1")
obj2 = ClassTest.new("o2")
obj1:setValue(1)
obj2:setValue(2)
obj1:execute()
obj2:execute()
こうなるよ。
↓
プロパティにはピリオド「.」でアクセス。 メソッドにはコロン「:」でアクセス。
(コンストラクタにはピリオド「.」)
Lua自体がクラスの機能を備えているというわけではなく、オブジェクト指向の実現方法はイロイロあるようです。
元気なお友達は研究してみてね。
ちなみに上記の方法は
ぱろっと・すたじお様の記事を参考にさせていただきました。
ありがとうございます。
さて、上記以外にも Luaの機能はイロイロありますが、 プログラミングの「プ」の字など4千年前に通過済みっっっ!!という頼もしいアナタなら ソースコードを一目ご覧になれば勘で乗り切れるに違いありません。 なので今後はあまり Lua自体の解説はしません。気合で乗り切ってね。