お絵描きやプログラミングやアーマードコアについて綴っていくつもりです。プログラミングは備忘録的に使うつもりだったりする。
プロフィール

Author:typeすつーか
FC2ブログへようこそ!

最新トラックバック
カウンターです
ついったー

広告とか

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--/--/-- --:-- スポンサー広告 TB(-) CM(-)
このエントリはProcessing Advent Calendar 2014の7日目の記事です。

Processingで使用可能なエフェクト描画のツールを公開しました。

ravencoding/StukaEffect | github
ravencoding/StukaEffect | github wiki

effectProcessing.png
play.png

Stateパターン的なものとリストを使ってエフェクトを描画してみた。

概念的には次の通り。

まず「エフェクト再生中」状態と「エフェクト再生終了」状態を表現できるように、
EffectAnimationクラスを用意。
EffectAnimation.png


で、エフェクトが発生したらEffectAnimationインスタンスを、再生中状態(Effect)でリストに登録して、
effectList.png


リスト内に入ったエフェクトを片っ端から(1フレームずつ)描画していく。
リスト内にあるすべてのエフェクトを1フレームだけ描画するメソッドはeffectPlay()

draw()内でeffectPlay()することでパラパラ漫画になる。
エフェクトの最後のフレームを描画し終わると、エフェクト再生終了状態(NonEffect)になり、
effectReflesh()メソッドでリストから取り除かれる。

■では、次に具体的な例でより詳しくみていこう
爆発エフェクト(15フレーム分の画像)と斬撃のエフェクト(9フレーム分の画像)がゲーム内でいくつか発生し、リストに登録されたとする。
この時の状態は次のとおり。
before_effectList.png

カッコ内の数字はエフェクトのフレーム数。
爆発エフェクトは15のフレームを持ち、
斬撃エフェクトは9のフレームを持つ。
それぞれ15、9フレーム目の画像を描画すれば、エフェクトの再生が終了することになる。
(ここでは単に終了の判定フラグとしてStateパターンを使っているだけ)

で、斬撃エフェクトが9フレームまで描画されて、Effect状態からNonEffect状態に遷移すると、
effectReflesh()メソッドにより、リストから除外される。
listafter.png


あとはEffect関連の便利なメソッドはクラスでまとめたかったので、EffectStukaクラスを用意した。
最終的にはこんな感じに↓
explodeanimation.gif

ちなみに、爆発エフェクトを生成するときは、
effectStuka.setEffect(Const.IMAGE_EXPLODE, 50, 90); //描画したい画像を定数で指定, x座標, y座標
と実行するだけでほぼ済むようにしてある。

effectStuka.setEffect()でエフェクトを生成・リストにセットして、
無限ループ内でeffectStuka.effectPlay()を実行して描画するイメージだ。

エフェクトが発生した順にリストの末尾に追加され、
リストの先頭から描画処理をしているため、
優先度的には、最後に発生したエフェクトがゲーム画面における最上位のレイヤに描画される感じになる。

「爆発エフェクトの後に斬撃エフェクトが発生したとしても、爆発エフェクトをゲーム画面の最上位レイヤに描画したい!」
といった方はForkして優先度順にソートしてくれるようにソースを改修してプルリクエストしてください。

あと思いついたことと言えば、
エフェクトごとにフレームレートを指定できるようになったら、表現の幅が広がるかなと。
これも気が向いたらForkとかして作ってやってください(ぇ


なお、実行時のgif録画にはGifRecorderを使いました。めっちゃお手軽すぎてびっくりしちゃいました!



おまけ
お仕事がおわったあとの貴重な時間と休日を使って、三日で作ってたっぽいです。
commitlogseffect.png



ちなみにRPGツクールと比較すると
StukaEffectRPGツクール
行数自由20以下で任意
列数自由5列固定
ピクセル数自由192固定


とからしいのでStukaEffectの使い勝手は良さそうです(おぃ

あと最後に言うのもなんですが、フレーム依存です。こちらも気が向いたら時間依存で作り直します。(プルリク投げてくれてもいいのよ。



導入例
2012年のアドベントカレンダーで紹介した自作の2Dゲームフレームワークに導入しました。
(まだ公開してないけど...)







Prominenceっていうツールを使えば簡単にエフェクトの画像がつくれるみたいです
Prominence | 藤宮翔流のひきだし

StukaEffectとProminenceがあればProcessing上でも簡単にオリジナルエフェクトが描画できますね!!!



明日は@ProcessingAholicさんです。



スポンサーサイト
2014/12/07 00:00 AdventCalender TB(0) CM(0)
コメント















 管理者にだけ表示を許可する

トラックバック
http://stukacoding.blog.fc2.com/tb.php/125-457285f7
検索フォーム
ブロとも申請フォーム
QRコード
QR
IPv4枯渇時計
linuxコマンド
ぶくろぐ
本棚です
icat
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。