Luaとは?
細かい話はすっ飛ばすとして、要はスクリプト言語の一種らしい。
スクリプト言語特有(?)の型付けの弱い言語で、型のない言語の中では最速を誇っているようです。
cocos2d-xから、このLuaを用いて開発できるように調整してくれているのが「Lua binding」でござる。
luaで開発するメリット
一番はやはり「生産性の高さ」だろうと思います。
cppで開発すると、どうしてもヘッダーと実装の二重構造がつきまとう上に、型の縛りが強くて、
あれこの関数にはstd::stringだっけ、charにキャストしなくちゃいけないんだっけなどと、プログラムの本質とは遠いところに意識を強く引っ張られてしまうのは、
僕のような怠惰なプログラマにとっては非常にやる気を削がれる部分なのだ。
あと、luaスクリプトの更新だけであれば「ビルド」という手順を飛ばすことができる。
これも生産性をあげる効果としてとてもでかい!
luaで開発するデメリット
気になるのは「速度」に関する問題かな?
#20 まさか、Cocos2d-x 使っているのに C++ 書いてるわけないよね?
こちらの記事によると、申し分ない速度が出るようだけれども、具体的な数字が出ていないために未知数なことは否めない。
あと気になる点としては、どうもluaスクリプトは「Resources」という扱いらしく、
つまり、アプリの中のファイル構成をのぞければ容易に改変が可能という問題があります。
これに関しては、「あらかじめ暗号化や難読化を施しておく」という対応が可能らしいので、その対応は必須となりそうです。
プロジェクトの作成
プロジェクトの作成は下記のようなコマンドで行います。
試しにビルドしてみてびっくり。なんとcppにおけるサンプルとは力の入れようが違うッ…!
どういうことなんだ、これは。。
スクリプト言語を噛む事でも、負けず劣らずの事ができますよ!という強いアピールなのかしら?
とにかく、心強いにも程があります。
丁度いいので、このサンプルコードの中を確認していく事にします。
luaサンプル確認の旅
c++からluaの呼び出し
コメントの書き方
細かい諸々
ログの出し方
おうっ、、、標準出力に出すことがログに出すことなのか。。
これはWEB系言語にはない感覚。
sceneの作成
layerの作成
スプライトの作成
サウンドの再生
タッチメニューの作成
タッチイベントの検知
アニメーション
毎フレーム処理
ガベージコレクト関係
まとめ
今日は、cocos2d-xのluaのサンプル内容を駆け足で確認していきました。
ざらっと見た感じ、大体の事はluaでも実現可能のように思えます。
変数の型に関して意識しないでいいのは本当に素晴らしいですね!
あと、headerファイルと実装で分離しないのもやはり生産性を高めるのは間違いなさそうです。
c++で書く必要もなさそうな処理に関してはluaを活用していくことで、生産性を2倍にも3倍にもできるような気がします。
ただ、冒頭でも触れたように、luaスクリプトは「リソースファイル」という扱いで、plainなテキストでアプリに同封されますので、
悪意のあるユーザーは改変が簡単にできてしまうでしょう。難読化、できれば暗号化できるのが望ましいです。
次回はそのあたりを調べてみようと思います。