「Cocos2d-x Advent Calendar 2014」の8日目は @zukkun が担当します。
Cocos2d-xのLuaプロジェクトをコマンドラインから作る流れを紹介します。
環境はMac OS X 10.9.5です。
Cocos2d-xをダウンロード
Download Cocos2d-x Cocos2d-html5 Cocos Studio | Cocos2d-x
上記ページからCocos2d-xの「Download v3.2」を選び、Cocos2d-xをダウンロードします。
ダウンロードしたzipファイルを好きな場所に展開します。
セットアップ
コマンドラインで、その展開したディレクトリに移動し、setup.py
を実行します。
$ cd <Cocos2d-x path>
$ ./setup.py
途中でAndroid NDKとAndroid SDKのパスを聞かれますが、今回はスキップします。
使用しているシェルの設定ファイルに設定が追加された旨言われますので、指示に従いsource
コマンドで実行を行います。(自分の環境では~/.zshrc
になりました)
Please execute command: "source <使用しているシェルの設定ファイル>" to make added system variables take effect
$ source <使用しているシェルの設定ファイル>
cocos
コマンドが使えるようになっているのを確認します。
$ cocos -v
0.7
プロジェクトファイルの作成
プロジェクトディレクトリを作りたい場所に移動し、cocos new
コマンドを使ってプロジェクトを作成します。今回、使用するディレクトリは/Users/zukkun
を例として進めます。
ここでは、例としてプロジェクト名「HogeLua」として作成を行います。
$ cd /Users/zukkun/
$ cocos new HogeLua -p com.your_company.hogelua -l lua -d .
cocos new
コマンドのパラメータとして、最初にHogeLua
としている部分がプロジェクト名です。
次に、-p com.your_company.hogelua
としているところがアプリパッケージ名で、iOSアプリ、Androidアプリなどをビルドする際に使用されます。
-l lua
としているところが「どのプロジェクトテンプレートを使用するか」という指定で、今回はLuaとしています。Luaでのゲームロジックの実装がすぐにできる状態でのプロジェクトが生成されます。他にcpp
を指定してC++での開発のためのテンプレートを使用することもできます。
上記コマンドを実行し、以下のように表示されたらプロジェクトファイルの作成の成功です。
Running command: new
> Copy template into /Users/zukkun/HogeLua
> Copying files from template directory...
> Copying cocos2d-x files...
> Rename project name from 'HelloLua' to 'HogeLua'
> Replace the project name from 'HelloLua' to 'HogeLua'
> Replace the project package name from 'org.cocos2dx.hellolua' to 'com.your_company.hogelua'
ディレクトリ構造
作成されたプロジェクトファイルのディレクトリ構造は以下のようになっています。
├── frameworks
│ ├── cocos2d-x -> こちらの内容のディレクトリ構造は省略
│ └── runtime-src
│ ├── Classes
│ ├── proj.android
│ ├── proj.ios_mac
│ ├── proj.linux
│ └── proj.win32
├── res
│ └── fonts
├── runtime
│ └── ios
└── src
frameworks/cocos2d-xをシンボリックリンクで対応する
frameworks/cocos2d-x
は、ダウンロードしてきて展開したCocos2d-xのディレクトリへのシンボリックリンクでも代用できますので、バージョン管理する際はそうしておいた方がいいかもしれません。
今回、念のためそうしておきましょう。
まず、元のディレクトリをまるっと消してから、シンボリックリンクを貼ります。
$ cd /Users/zukkun/HogeLua
$ rm -rf frameworks/cocos2d-x
$ ln -s <Cocos2d-x path> framewoks/cocos2d-x
ビルドを試す
上記のシンボリックリンクが正しく行われているかどうかの確認も含め、プロジェクトのビルドを試します。
ビルドにはcocos compile
コマンドを使用します。
$ cd /Users/zukkun/HogeLua
$ cocos compile -p mac
-p mac
は、ビルド対象のプラットフォームの指定で、今回Macで動作するもののビルドを試します。
※Mac, iOS向けのビルドにはXcodeがインストールされている必要があります
ビルドを実行すると、Cocos2d-xのエンジン全体のコンパイルが行われますので、ビルドに時間を要します。マシンのCPUファンが唸りを上げると思います。
最後に以下のような表示がされたら、ビルド成功です。
** BUILD SUCCEEDED **
build succeeded.
実行する
ビルドができたらcocos run
コマンドで実行してみます。
$ cocos run -p mac
-p mac
は、cocos compile
の時と同じ対象プラットフォームの指定になります。
上記の実行を行いますと、新たにウィンドウが開かれ、プロジェクトテンプレートに入っているままのサンプルが動作します。
陽気な音楽と共に、リスらしき生命体が延々と歩き出します。
ソースを読む
このテンプレートのサンプルのゲームロジックに相当するプログラムは、src/main.lua
に記述されています。
ゲームロジックを書いていく場合、こちらのファイルを触ることになります。
実行されるLuaのファイルを変更する
プロジェクトテンプレートとしてsrc/main.lua
が実行されるようになっているのは、C++側でsrc/main.lua
が実行されるように記述されているからで、それを変更することで、実行されるLuaのファイルを変えることができます。
Luaが実行される記述がされているファイルはframeworks/runtime-src/Classes/AppDelegate.cpp
になります。
こちらのファイルに以下のような記述があります。
bool AppDelegate::applicationDidFinishLaunching()
{
auto engine = LuaEngine::getInstance();
ScriptEngineManager::getInstance()->setScriptEngine(engine);
if (engine->executeScriptFile("src/main.lua")) {
return false;
}
return true;
}
上記のengine->executeScriptFile("src/main.lua")
がLuaの実行部分なので、ここを改変することが可能です。
また、プロジェクトテンプレートとしては、ゲームロジックすべてをLuaで書くことを想定しているような印象ですが、上記のようにC++側で任意にLuaを実行することが可能ですので、一部のゲームロジックのみLuaで記述したり、イベントスクリプトのような用途でのみLuaで記述する、といったことも可能ですが、比較的テクニカルな領域になりますので、さくっとゲームを作りたい、という場合は、ゲームロジックはすべてLuaで書く、という使用方法を選択するのが良さそうです。
サンプルの内容
src/main.lua
の内容の読み解きとその解説もしようと思っていましが、けっこう時間を要しそう&長くなりそうなので、今回は割愛します。
Cocos2d-xの書籍
Cocos2d-xと言えば @giginet さんですが、そんなgiginetさんがCocos2d-xの本を出します!2014年12月24日発売予定です。
『cocos2d-xではじめるスマートフォンゲーム開発』という本を出版します - 5.1さらうどん
書籍には、Luaに関する解説は無いようですが、Luaから実行できるCocos2d-xのAPIは、C++のものと同じですので、本書はLuaでの開発にも生かせると思います。私も買います。
明日は @kyokomi さんです。