Effekseerの2Dエフェクトの描画順
記事にするのを忘れていました。
「Effekseerを使うにあたっての疑問」
で書いた描画の順番の話です。
一部再掲になりますが
この画像だとミクの下の赤いエフェクトが
ミクの手前じゃなく、ミクの奥で描画して欲しいといったことはできるんだろうか?
例えば、初音ミク冒険記だと
1.マップレイヤー1(超ゆっくり動く背景)
2.マップレイヤー2(ゆっくり動く背景)
3.マップレイヤー3(ミクと一緒の速さで動く背景)
4.エフェクト1を再生(赤いエフェクト)
5.ミクを描画するレイヤー
6.マップレイヤー4(ミクと一緒の速さで動くけどミクより手前の背景)
7.マップレイヤー5(ミクより早く動くミクより手前の背景)
8.エフェクト2を再生(緑のエフェクト)
というのがあったとして
上から順番の描画順にしたい。
Effekseerの製作者さんに相談したところ
・DrawEffekseer2D_Begin
・DrawEffekseer2D_Draw
・DrawEffekseer2D_End
という関数を作ってくれました!
このため、こんなふうに目的とすることができました!
・DrawEffekseer2D_Begin
・DrawEffekseer2D_Draw
・DrawEffekseer2D_End
の3関数の中身としては、
DrawEffekseer2Dの中身を分解した内容とのことで
DrawEffekseer2Dとの併用はしてはいけません。
使い方としてはエフェクトを使いたいところで
以下のようにするイメージです。
DrawEffekseer2D_Begin();
DrawEffekseer2D_Draw(effectHandle);
DrawEffekseer2D_End();
なお、
while(ProcessMessage() != -1){
// 画面消去(ループの最初に必ずする)処理
ClearDrawScreen();
DrawEffekseer2D_Begin();
数々の描画処理(この間でDrawEffekseer2D_Drawを使う)
DrawEffekseer2D_End();
// 画面入れ替え(ループの最後に必ずする)処理
ScreenFlip();
}
のようにProcessMessageの最初のほうでDrawEffekseer2D_Beginして
最後のほうでDrawEffekseer2D_Endする
というのではなく、エフェクト描画のところだけピンポイントで
DrawEffekseer2D_BeginとDrawEffekseer2D_Endでくくるようにします。
つまり、上の図だと赤いエフェクトと緑のエフェクトで
それぞれ
・DrawEffekseer2D_Begin
・DrawEffekseer2D_Draw
・DrawEffekseer2D_End
を呼び出しています。
さて、ここでかげさんが気になったのは
UpdateEffekseer2Dのタイミングです。
EffekseerのサンプルのプログラムだとUpdateEffekseer2Dは
DrawEffekseer2Dの直前にあります。
・DrawEffekseer2D_Begin
・DrawEffekseer2D_Draw
・DrawEffekseer2D_End
の3関数の中身としては、
DrawEffekseer2Dの中身を分解した内容ということは順番はどうなるの?
順番は入れ替わっても良いの?
ということで、Effekseerの製作者さんに確認しました。
すると
DrawEffekseer2D_Beginみたいに、ProcessMessageのループ内で
DrawEffekseer2D_Draw
DrawEffekseer2D_End
間に処理がある
DrawEffekseer2D_Begin
DrawEffekseer2D_Draw
DrawEffekseer2D_End
間に処理がある
UpdateEffekseer2D
ScreenFilp前ならどこでも良いみたいです。
うん、疑問が1つ解決してスッキリした!
あ、そういえば、そもそもなぜこんなことを疑問に思ったのかを
書いていなかった気がする・・・
この本にゲームエフェクトの大雑把なカテゴリ分け
というのが載っていたからです。
BISHAMONゲームエフェクトデザイン入門 (GAME DEVELOPER BOOKS)
■キャラクターに属するもの
武器の軌跡や魔法の演出などがあり
アクションエフェクト、バトルエフェクトなどとも呼ばれる。
キャラクターの特定のアニメーションの特定タイミングで表示する事が多い。
常に体が燃えているなどの恒久的なエフェクト(溶岩系の敵とか)や
水辺に入ったら水しぶきといった特定条件下で表示するエフェクトがある。
■背景に属するもの
暖炉の炎、木陰から差し込む光、バリアなど
特定の場所に設置して表示し続けるエフェクト。
マップエフェクト、BGエフェクトなどとも呼ばれる。
■画面に属するもの
画面(カメラ)にたいして表示するエフェクト。
必殺技での集中線とか、雨や雪をカメラの特定部分に降らせるなど。
ポストエフェクトで、がめんそのものに様々な効果を与えることもある。
この中の「背景に属するもの」としてやりたいことが
いくつかありまして、
それもマップ制作が進んでいなかった理由の1つだったりします。
で、Effekseerが使えるなら、やりたかったことが実現できるかも!?
と考えた時に、DrawEffekseer2Dだと
「画面に属するもの」とか「キャラクターに属するもの」はできそうだけど
2Dゲームで「背景に属するもの」をやろうとすると
エフェクトが常に最前面だと困るのです・・・
ちょっと今の初音ミク冒険記だと例が見つからないけど
例えば、先の例だと「暖炉の炎」をやる場合
ミクが暖炉の炎の前を通る時に炎だけ前に出ると困るなぁと思ったのです。
背景エフェクトは、いくつもAstlibraの実装例があるので
それを真似できる所は真似しようと思っていたのですが
そもそもマップのグラフィックが全然出来ていないので
エフェクトの実装どころじゃなかったんですよね・・・
まぁ、それは今も変わんないのですが、
それでもやりたいと思ったことの実現可能性が高まったのは嬉しいです!
Effekseerの製作者さん、関数の追加、ありがとうございます!
| 【固定リンク】 | 【コメント (0)】 | 【トラックバック (0)】
このエントリーへのリンク
トラックバック
この記事へのトラックバックの一覧です: Effekseerの2Dエフェクトの描画順:
コメント
このブログの新着コメントをRSSリーダに登録する為のxml