openFrameworksでEventDispatcherを作った

今までFlashを生業としてた僕がopenFrameworks(以下oF)で案件をこなそうとすると慣れないC++やAS3とは違う描画フローなどで制作スピードが一気にガタ落ちします、、
趣味でやるのならそれでもいいのですが、案件で使うとFlashだろうがoFだろうが関係なくスピードを求められますよね。
僕のようなFlasherあがりは、なるべくFlashライクにプログラミングができれば制作スピードを保てるんじゃないかと考えるわけです。

FlashとopenFrameworksの違いは星の数程あれどやっぱり一番ネックになるのは下記の2点かなーと。

・イベントドリブン
・ディスプレイオブジェクトツリー

この2つをoF上で実装さえすればFlaserな僕でもoFを案件レベルで使いこなせるはず!
oFでのイベントディスパッチャーの実現については既に先駆者がいました。

『C++でAS3ライクにイベントを記述する JPPEvent 公開』
(さすが alumican の人だなぁー・・)

ソースを覗いたりして凄いなーといろいろ勉強させて頂いたのですが僕の期待している挙動ではなかったので自作する事にしました。
oF関係なしにC++でASライクなEventDispatcherを実装しようとした試みでいうと下記の様な記事も見つかります。

『Implementing flash.events.EventDispatcher in C++』

これらを元に自分好みのEventDispatcherクラスを実装しましたのでいきなりファイルDONE!

EventDispathcer.zip

上記の領域からDLできます

必要なファイルは
Event.h
Event.cpp
EventDispatcher.h
EventDispatcher.cpp
の4つです。
Object.h, Object.cpp があってこれを継承させていますが
僕が自作しているオレオレフレームワーク作成の為の布石なので
ホントはいらないですね、、

testApp.hとtestApp.cppはこんな感じ
EventDispatcherを継承させたTestDispatcher、
Eventを継承させたCustomEventなるものをテスト用に作った。

ASライクな記述なのでFlasherな方なら大体わかるかと思います。
addEventListenerの第2引数にthisを入れないといけなかったのはC++の性質上
しょうがなかったです、、

イベントハンドラはこんな感じ。

dispatchさせてている箇所。

なかなか記述方法も挙動もASっぽくなったと思います。
注意点としてイベントハンドラをstaticにしないといけなかったりなどありますが、、
AS的にするとEventDispatcher自体をnewできないようにするか悩んだのですが
とりあえずコンストラクタはパブリックにしてます。

僕の場合このあと、EventDispatcherを元にディスプレイオブジェクトツリーも
実現したりとASのビルドインクラスの大半をガッツリ移植したりしましたので
過去のFlashのソースコードを難なくoFで活用できる様にしてます。

案件によってFlash,openFrameworksと適材適所でハイブリットな設計で乗り切れると
幸せなんじゃないでしょうーか♪


related article