2013年9月11日水曜日

[tips : cocos2d-x 2.1.5] luaを気軽に使いたい(1)

■前置き
 cocos2d-xではcocos2dx_luaテンプレートを使うことでluaベースのプログラムを無手から始めることができます。

 現在のスマートデバイスはプロセッサの速度も速く実数演算も実用レベルでこなしますからluaのみの実装で充分なケースも少なくはありません。

 とはいえc++から呼び出しすことができればシーンの初期化やイベント制御、またオブジェクトの制御をプログラムから切り離すことができ、生産性を飛躍的に向上させることが可能です。

 ではどのように実現すればいいか、今回はまずcocos2dx_luaテンプレートで目についたCCLuaEngineとその拡張元であるCCLuaStackについてかなりザックリと記しておきたいと思います。

■CCLuaEngine
 CCLuaStackにイベントやスケジューラーまわりの機能を拡張したクラスで、luaメインで組む場合に使用します。

 CCLuaEngine固有の機能はc++から呼び出すにあたり無駄でしかありませんので素直にCCLuaStackを使った方が良さそうです。

■CCLuaStack
 luaのスレッド(実質VM)であるlua_Stateをcocos2d-x向けに拡張したものですが、CCLuaEngineの基礎として設計されているため欲しい機能が全てある、という状態ではありません。

 ただし、cocos2d-xの多くのクラスがそうであるように継承による調整は容易です。

 なお、継承する際は、luaからcocos2d-xの機能を利用するために用意された68,000行に迫るグルーコードの存在を意識しておきましょう。

※グルーコードをザックリ説明すると、スクリプト言語(lua)から呼び出されるネイティブ言語(c++)の実行関数と登録コードのことです

※グルーコードに興味がある方は"$(PROJECT_NAME)/libs/lua/cocos2dx_support/LuaCocos2d.cpp"を開いてみましょう

 グルーコードはtolua++というツールで自動生成され、非常に多くの恩恵を授けてくれますが、その反面コードサイズが増加し、CCLuaStackの生成にも相応の処理時間が必要となります。

 これは多くの場合取るに足らない程度のものですが、例えば、古いデバイスで、弾ごとにスクリプトを持たせ、弾幕を生成する、といった場合、処理落ちを覚悟する必要はあるでしょう。

 そうなってからでは遅いのであらかじめテストしておいた方が無難、という程度の話ではあります。

 次回は実際にluaスクリプトを動かしてみたいと思います。

0 件のコメント:

コメントを投稿