108.SpriteStudio5データの実装

このサンプルはFullTutorial008というディレクトリに含まれます。
 BaseCrossDx11.slnというソリューションを開くとDx11版が起動します。
 リビルドして実行すると以下の画面が出てきます。

 

図0108a

 


解説

 このサンプルは株式会社ウェブテクノロジ社様SpriteStudio5の再生をする方法です。BaseCrossSpriteStudio5データ(XML形式)にネイティブで対応しています。
 SpriteStudio5データはもともと2Dデータですが、BaseCrossでは、それを2D上に展開する方法と3D上に展開する方法が選べます。
 サンプルでは女の子3D上の展開であり、卵のキャラクターが2D上の展開です。

 では、女の子から見ていきましょう。Player.h/cppに記述があります。
 SpriteStudio5データを実装クラスはSS5ssaeを継承して作成します。このSS5ssaeGameObjectの派生クラスです。以下は、宣言部(抜粋)です。
class Player : public SS5ssae {
    //中略

public:
    //構築と破棄
    Player(const shared_ptr<Stage>& StagePtr, const wstring& BaseDir);
    virtual ~Player() {}
    //初期化
    virtual void OnCreate() override;

    //中略

    virtual void OnUpdate() override;
    virtual void OnCollision(vector<shared_ptr<GameObject>>& OtherVec) override;
    virtual void OnLastUpdate() override;
};
 コントローラで動作し、ステートも使用していますが、ここではSS5ssaeを継承するという部分と、コンストラクタに、データのディレクトリを渡すという部分が重要なので、ほかの部分は略してあります。
 続いて、実体です。以下はコンストラクタです。
Player::Player(const shared_ptr<Stage>& StagePtr, const wstring& BaseDir) :
    SS5ssae(StagePtr, BaseDir, L"character_template_3head.ssae", L"wait"),
    m_MaxSpeed(40.0f),  //最高速度
    m_Decel(0.95f), //減速値
    m_Mass(1.0f),   //質量
    m_ZRailIndex(0),
    m_ZRailBeforIndex(0)
{
    //中略

}

 ポイントは親クラスのコンストラクタ呼び出しですが、赤い部分の記述のようにディレクトリ名ファイル名を記述します。
 最後の引数は最初のアニメーション名ですSpriteStudio5データはアニメーションを名前で管理します。
 このようにして構築したら、あとは、タイミングによってアニメーションを変更します。
 このサンプルではいくつかアニメーションを変更するタイミングがあります。実際の変更はPlayer::AnimeChangeMotion()関数に記述されています。
void Player::AnimeChangeMotion(const wstring& key, bool looped) {
    ChangeAnimation(key);
    SetLooped(looped);
}
 赤い部分は親クラスのメンバ関数を呼び出しています。ChangeAnimation()関数はアニメーションを変更します。SetLooped()関数ループするかどうかを設定します。

2D上のSpriteStudio5

 サンプルの下部で行ったり来たりしている卵型のオブジェクトは2D上で配置されています。これを実装するには、コンストラクタで
EggAnime::EggAnime(const shared_ptr<Stage>& StagePtr, const wstring& BaseDir) :
    SS5ssae(StagePtr, BaseDir, L"character_template_2head.ssae", L"attack1", true),
    m_Span(100.0f)
{}
 のように、親クラスのコンストラクタ呼び出しの初期アニメーションの次のパラメータにtrueを渡します。
 このパラメータは2Dかどうかを設定するパラメータで、デフォルト引数になっています。デフォルト値はfalse(つまり2Dにしない)です。