LoginSignup
23
23

More than 5 years have passed since last update.

cocos2d-x 3.0でLuaの環境設定

Posted at

cocos2d-x 3.0でLuaを使いたいと思った。
しかし公式が推奨しているcocosコマンドでlua用のプロジェクトを生成するやり方だと、最初から最後まで全部Luaで書けみたいな圧力を感じた。公式のエディタであるCocosCodeIDEが実際Eclipseだったということも気に入らなかったので既存のcocos2d-xプロジェクトにLuaBindingsを統合する方法がないか色々調べた。

…のだけど、なんかしらんけど英語圏も日本語圏にもまともにそういう資料がなくて、ほんとにluaを使ってるやつなんているの?って感じになった結果、cocosコマンドで生成されるLua用プロジェクトを参考にするのが一番いいと結論づけた。

という訳で既存のcocos2d-xプロジェクトにLuaBindingsを導入する流れ。

必要なファイルをプロジェクトにインポートする

デフォルトでC++でプロジェクトを作成した場合、プロジェクトの中にlua用のファイル郡は入っていない。というわけでそれらをつれてくるところから始めなくてはいけない。

必要なファイル郡は2つ。
cocos2d-x 3.0をzip解凍すると以下のようなファイル構成になっているはずだけど、

スクリーンショット 2014-07-07 22.36.08.png

cocos/scriptingをコピーする

スクリーンショット_2014-07-07_22_22_42.png

external/luaをコピーする

スクリーンショット_2014-07-07_22_23_16.png

lua用のxcode projectを既存のプロジェクトに追加する

scripting/lua-binding/proj.ios_mac/cocos2d_lua_bindings.xcodeprojを既存のxcodeプロジェクトにファイルとして追加する。

スクリーンショット_2014-07-07_22_23_38.png

スクリーンショット 2014-07-07 22.23.48.png

Build Phasesにluaのライブラリを追加する

スクリーンショット_2014-07-07_22_33_20.png

Header Search Pathを設定する

既存のプロジェクトからLua一群を使うためにヘッダへのパスを通す。めんどうだからrecursiveに。

スクリーンショット_2014-07-07_22_24_33.png

Common Luaファイルを追加する

ここらへんから魔界に踏み込んできた感があるが、scripting/lua-bindings/scriptをプロジェクトに追加する。でないとluaファイルからCocos2D.luaをrequireできないらしい。

スクリーンショット_2014-07-07_22_24_56.png

スクリーンショット 2014-07-07 22.43.41.png

Luaファイルを実行してみる

これでうまくプロジェクトがビルドできたら次はc++ファイルの中からluaファイルを呼び出してみる。以下を参考に。

http://wonderpla.net/blog/engineer/Cocos2dx_Lua/

test.lua
function add (x, y)
    return x + y
end
AppDelegate.cpp

#include "CCLuaEngine.h"

bool AppDelegate::applicationDidFinishLaunching() {

    // 中略

    auto engine = LuaEngine::getInstance();
    ScriptEngineManager::getInstance()->setScriptEngine(engine);
    engine->executeScriptFile("test.lua");

    lua_State* L = engine->getLuaStack()->getLuaState();
    lua_getglobal(L, "add");
    lua_pushinteger(L, 1);
    lua_pushinteger(L, 2);
    if (lua_pcall(L, 2, 1, 0)) {
        CCLOG("error=%s", lua_tostring(L, lua_gettop(L)));
    } else {
        CCLOG("return=%d", lua_tointeger(L, lua_gettop(L)));
    }
    return true;
}

とりあえず実行できた。LuaのVMの扱い方がよく分からないけどあとは公式のluaのバインディングを参考にcocos2d-xのAPIを呼び出したりしてみる。

おまけ(cocosコマンドで生成されるluaプロジェクト)

cocosコマンドで生成されるluaのプロジェクトはよく見るときちんとios/androidのプロジェクトがあって、その中でmain.luaというluaファイルを上記の方法で実行している。実行時にluaファイルの更新を反映させられるのはRuntimeというクラスがtcpサーバーを生成してごにょごにょやっているかららしい。

そっちのプロジェクトをいじったほうが速いし確実なのかもしれない。

23
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
23