cocos2d-x v2.2.6でSpine v2.1.27(Essential)に梱包されているサンプルアニメーション(iOS版)が動かなかったので、
Spine-runtimeをマニュアル通り、最新verに更新したらcocos2d-xがエラーだらけになり、
四苦八苦しながら何とか動かせるようにまでにした時のメモ。
■Spineがexportする.atlasファイルが読み込めない問題
まず、自分で簡単なアニメーションを作成しSpineでエクスポートしたファイルを
cocos2d-xで動かそうとすると
、この問題にぶち当たります。
これは、出力された.atlasファイルを修正すると直ります。
上の画像にある
size: xxx, xxx
という1行を削除すればOKです。
または、このあと行うSpineのランタイムを更新すると直ります。
■Spineのランタイムを更新する問題
githubからランタイムをDLしてきます。
/spine-runtimes
更新に必要なファイルは
spine-c/以下 と
spine-cocos2dx/2/以下 のファイルだけです。
READMEにある通り、上のファイル群をcocos2d-xのextensions/フォルダ以下へコピーします。
githubからDLしたファイルすべてをまた
extensions/spineというフォルダに入れます。
READMEによるとこれで動くぜ、とのことです。
動きません。
なぜなら、Xcodeには前の古いファイルがまだ紐付けられているからです。
ここを正しくします。
やり方は色々ありますが、僕の場合は面倒なので
まずディレクトリーツリーからspine/をRemove Referencesしてから、
DLしてきたextensions/spineフォルダをXcodeへドラッグ&ドロップします。
No type named 'function' in namespace 'std'
といったエラーが出ます。
これは新しいSpine-runtime内のソースファイルの一部が
C++11の規格によって記述されているから。
cocos2d-x v3系であれば問題ない(?)のかもしれませんが、v2系ではだめです。
Xcode側でC++11を使えるようにします。
TARGETSのBuild Settings内にある「Apple LLVM 6.1 - Language - C++」という箇所の
・C++ Language Dialectを「C++11 [-std=c++11]」に
・C++ Standard Libraryを「libc++(LLVM C++ standard library with C++11 support)」
に変更します。
同様にcocos2d-xプロジェクト側のBuild Settingsも上に合わせます。
次にクラス名とメソッドを変更します。
// CCSkeletonAnimation *animation = CCSkeletonAnimation::createWithFile("test.json", "test.atlas"); spine::SkeletonAnimation *animation = spine::SkeletonAnimation::createWithFile("test.json", "test.atlas", 1.0f); // animation->setAnimation("walk", true); animation->setAnimation(0, "walk", true); this->addChild(animation);
こうなります。
あとはプロジェクトを一旦Cleanしてからビルドすると動くと思います。
それでもまだエラーが出る場合は、
プロジェクト名>Build Phases>Compile Sources
に古いspine/以下のソースファイルが赤く表示されているかも知れません。
その場合はそれらを消してもう一度試してみてください。
※※注意※※
もし別のプロジェクトに手を付ける場合、
spine/フォルダや、C++11コンパイラオプションの変更などを元に戻して下さい。
もう、cocos2d-x v3系にしないとな。。。
以上でぇぇぇぇす。