SpriteStudio For cocos2d-xを、SSPlayerからSS5Player移行したメモ
Wikiやりながらやったけど、結構時間かかったのでメモ。
1.ssbp形式への変換
sspjなどのプロジェクトを開けるファイル一式データを用意します。
- .sspj
- .ssae
- .ssce
- 元画像ファイル(多分不必要)
データを直接いじる可能性があるので、バックアップも取っておいたほうがいいです。
・データをコンバートする
コンバーターをダウンロードします。
自分はMacでやりました。
コンバーターを起動したら、とりあえず.sspjファイルをドラッグ&ドロップして変換してみます。
特に問題なければ、プログラムコードの修正へ。
・全角文字エラー対策
Wikiより。
この時、全角があるとエラーが出ます。
ファイル名に全角文字を使用しないでください。
セル名、パーツ名、ラベル名に全角文字を使用しないでください。
上記以外に、ファイルパスにも全角あるとエラーになるので、
とりあえず.ssae、.ssceをテキストエディタで開いて、全角文字をひと通り無くします。自分は適当に半角英語に置換しておきました。
全角がなくなると、変換できると思います。
これで.ssbpファイルが出来ました。
2.プログラムコードの修正
次に、プログラムに反映します。
必要なファイルは、ssbpファイルと、エクスポート時に出力されていた画像ファイルです。
大体は
に書いてあるんですけど、
これだけだとわかりにくい部分を補足。
移行のサンプルコードにて、SSPlayerの作成までは同じ処理の代用になっていますが、
// ImageList(png名)の読み込み
ssPlayer->setData("sample");
// "ssae名/アニメーション名"で呼び出し可
ssPlayer->play("sample/hoge");
ここの引数の意味を調べる必要があります。
・setDataの引数
setDataが SSImageList::createでやっていた処理と同じく、画像を読み込む処理になります。
このsetDataの文字列は.ssceの名前じゃなくて、読み込んだ.ssbpの名前を指定する必要があるみたいです。
コメントではpng名と書いてあるのですが、png名で読み込めるパターンがあるのでしょうか……?
・play関数の引数
play関数の引数のアニメーション名は、以前は指定しなくても動いていた?ので、調べる必要があります。
再生するアニメーション名の調べ方ですが、
まず、ssaeファイルをテキストエディタで開き、animeListタグを探します。
<animeList>
<anime>
<name>animation</name>
この、animeタグ内のnameタグに囲まれている文字列を、playするときに指定する必要があります。(この場合animation)
ssPlayer->play("[.ssaeのファイル名]/animation");
こんな感じ。
自分の場合は、もともと1ファイルにつき1アニメーションだったので、1つの指定でいけました。複数ある場合は複数調べて、アニメーション切り替えタイミングでそのアニメーション名を指定すればいけるはず。
3.テクスチャのUV座標が崩れる問題
これで再生されたと思ったら、テクスチャのUVがグチャグチャになる人が出てくると思います。ぱっと見、なんとなくUV座標がおかしいのはわかるのですが、変換がミスったのか、再生するプログラムが悪いのか、わかりづらいので困りますね。
この問題は、cocos2dx側でDirector::getInstance()->setContentScaleFactorを呼んでいる場合に起こります。
対策は、Wikiに書いてあるとおり、
UVをスケールに合わせて補正する
Playerクラスのメンバ関数setContentScaleEneble()にtrueを設定すると、cocosに設定されたスケールからUVを補正して表示します。
ssPlayer->setContentScaleEneble(true);を呼ぶと解決すると思います。
この問題の解決策、マルチ解像度対応についての注意点に書いてあったので、原因を探すのに時間かかりました……
これで動くはず。
あとアニメーション再生が早いと思ったら、ssPlayer->setStepとかで調整すればいいと思います。
4.上記で解決しない、他にわからないことがあったら?
Wikiを読みましょう。実は解決策が書いてあったりします。
でも原因がわからないと、解決策がわからないような部分があるので注意。
(テクスチャUV崩れる問題がそうでした)
FAQは、症状から検索できて、それの解決法を書くのが便利だと思いました。