SpriteStudio For cocos2d-xを、SSPlayerからSS5Player移行したメモ

Wikiやりながらやったけど、結構時間かかったのでメモ。

 

1.ssbp形式への変換
sspjなどのプロジェクトを開けるファイル一式データを用意します。

  • .sspj 
  • .ssae 
  • .ssce 
  • 元画像ファイル(多分不必要)

データを直接いじる可能性があるので、バックアップも取っておいたほうがいいです。 

 

・データをコンバートする

コンバーターをダウンロードします。 

自分はMacでやりました。

github.com

コンバーターを起動したら、とりあえず.sspjファイルをドラッグ&ドロップして変換してみます。
特に問題なければ、プログラムコードの修正へ。

 

・全角文字エラー対策
Wikiより。

この時、全角があるとエラーが出ます。
ファイル名に全角文字を使用しないでください。
セル名、パーツ名、ラベル名に全角文字を使用しないでください。

上記以外に、ファイルパスにも全角あるとエラーになるので、
とりあえず.ssae、.ssceをテキストエディタで開いて、全角文字をひと通り無くします。自分は適当に半角英語に置換しておきました。

全角がなくなると、変換できると思います。
これで.ssbpファイルが出来ました。

 

2.プログラムコードの修正

次に、プログラムに反映します。

必要なファイルは、ssbpファイルと、エクスポート時に出力されていた画像ファイルです。

大体は

github.com

に書いてあるんですけど、
これだけだとわかりにくい部分を補足。

 

移行のサンプルコードにて、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を読みましょう。実は解決策が書いてあったりします。

github.com

 

でも原因がわからないと、解決策がわからないような部分があるので注意。

(テクスチャUV崩れる問題がそうでした)

 

FAQは、症状から検索できて、それの解決法を書くのが便利だと思いました。