SpriteStudio / SS5PlayerForCocos2d-x

OPTPiX SpriteStudio 5 で制作したアニメーションデータを Cocos2d-x v3 v2 上で再生するためのプログラムです。
MIT License
8 stars 7 forks source link

v1.3.0 任意のフレームのユーザーデータを取得したい #50

Open yukio55 opened 8 years ago

yukio55 commented 8 years ago

任意のフレームのユーザーデータをコールバックを経由せず 事前に取得したいのですが、そのような方法がありますか?

yukio55 commented 8 years ago

Player::checkUserDataをコピーして Player::getUserDataを作成、 コールバックを呼ぶ部分をreturn _userData 変更することで実装しましたが 他になにか良い方法があればご教授願います。 (他のreturn文は return nullptrとしました)

DKAlpha commented 8 years ago

任意のフレームのユーザーデータを取得したいという事ですが、ユーザーデータは任意のフレーム番号から含まれている各データにアクセスできる様に格納されております。 実装された方法の様にユーザーデータコールバック関数を元に作成するのがよいかと思います。

注意点としては、同じフレームに複数のパーツのユーザーデータが含まれる場合があるため、 _userDataCallback(this, &_userData); を return _userData;のようにしてしまいますと、1つのユーザーデータを取得した所でreturnしてしまうため、同フレームの他のユーザーデータを取得する事ができません。

それを考慮すると例えばstd::vectorを利用して、

std::vector<UserData> rc;
各パーツのデータの取得処理
rc.push_back(_userData);
return(rc);

の様に配列を返す様にするとよいのかなと思います。 他のreturnについてもrcを返しておけばデータが無い場合はrcのcountが0になるので、アプリ側の処理はイテレーター参照ループを作成する事でデータの有無に関わらず処理を統一できるのではないかと思います。

yukio55 commented 8 years ago

なるほど、複数のパーツの同フレームにユーザーデータが設定される場合を考慮してませんでした。 ありがとうございました。