Cocos2d-xをgithubからcloneしたときの注意点など

木内智史之介(シャッチョー)
ミンカさんけっこんしてくださいおねがいします(ズザー
SEGAさん、DIVAの筐体ください(ズザー

cocos2d-x game jamでの悲劇

紳士淑女のみなさん、こんにちわ。智史之介です。
cocos2d-xをダウンロードするときに、オフィシャルサイトから落としていますか?
良識ある社会人であれば、それをオススメします。なにも自ら進んで無用なアクシデントに嵌まることもありませんから…。

先日(3月1日)、cocos2d-x限定の5h game jamが開催されて、自分はそれに参加してきました。
開発時間が5時間(実質は4時間ほど)しかなかったので、基本的にはみなさんjavascript bindingで行われたのですが、 のっけから自分はビルドにつまづくのです。


            ___
       /      \
      /ノ  \   u. \ !?
    / (●)  (●)    \ 
    |   (__人__)    u.   | クスクス>
     \ u.` ⌒´      /
    ノ           \
  /´               ヽ

         ____
<クスクス   /       \!??
      /  u   ノ  \
    /      u (●)  \
    |         (__人__)|
     \    u   .` ⌒/
    ノ           \
  /´               ヽ

なんかファイルがない…?no such file or directoryとか言ってる。。

game jam当日は、堀講師の用意したサンプルの中にあった該当ファイルをコピーしてくることで急場を凌いだのですが、 このまま放っておいても今後自分が困るだけなのでキッチリ解決しておきたいと思います。

おそらくgithubからcloneしてきたソースを使っていたのが問題

バージョン間の差分や変更履歴を追うのにgithubから落としてきた方が色々都合がよかったので、 僕はオフィシャルサイトからのパッケージダウンロードではなかったのだ。

「そんなファイルはないよ」と言われたファイルが「cocos/scripting/auto-generated/js-bindings」の中のファイルだったので、 なにかしらビルド的なことをしなくちゃいけないのかなと類推してみる。

toolsの中にそれっぽいのがあったので実行だ!

1
2
3
$ ./tools/tojs/genbindings.sh
...
./tools/bindings-generator/generator.py': [Errno 2] No such file or directory

がびーん。cocos2d-x 3.0beta2バグだらけやん!と悪態をついてみるも、何かがおかしい、と気づく。
こういうときはソースを見るに限る。しかも、github上のcode browserで確認するのが確実だ。

https://github.com/cocos2d/cocos2d-x/tree/d63aefe919f92bd5247b4c40d14e13ab5112babe/tools

すると一目瞭然、submoduleだったのね…。

https://github.com/cocos2d/cocos2d-x/tree/d63aefe919f92bd5247b4c40d14e13ab5112babe/cocos/scripting

auto-generatedの方もsubmoduleであることを確認。

submoduleだと分かれば話は早い。

1
2
$ git submodule init
$ git submodule update

うん、落ちてきた落ちてきた!

1
2
3
4
5
6
7
8
9
10
$ ./tools/project-creator/create_project.py -n jssample -k jp.co.befool.study -l javascript -p projects
###begin copy engine
waitting copy cocos2d ...
cocos2d     : Done!
proj.ios_mac        : Done!
proj.android        : Done!
proj.win32      : Done!
###New project has been created in this path:
projects/jssample
Have Fun!

さくっとサンプルを作成して、ビルドしてみると、通る!

ふだんgit submoduleをあまり使わないので、頭からスッポリ抜けてるんだよなー。
まだまだ精進が足りんとですね。おっす!