108.SpriteStudio5データの実装
このサンプルは
FullTutorial008というディレクトリに含まれます。
BaseCrossDx11.slnというソリューションを開くと
Dx11版が起動します。
リビルドして実行すると以下の画面が出てきます。
図0108a
解説
このサンプルは
株式会社ウェブテクノロジ社様の
SpriteStudio5の再生をする方法です。
BaseCrossは
SpriteStudio5データ(XML形式)にネイティブで対応しています。
SpriteStudio5データはもともと
2Dデータですが、
BaseCrossでは、それを
2D上に展開する方法と
3D上に展開する方法が選べます。
サンプルでは
女の子が
3D上の展開であり、卵のキャラクターが
2D上の展開です。
では、
女の子から見ていきましょう。
Player.h/cppに記述があります。
SpriteStudio5データを実装クラスは
SS5ssaeを継承して作成します。この
SS5ssaeは
GameObjectの派生クラスです。以下は、宣言部(抜粋)です。
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にしない)です。