「そうめん」で作る「情報視覚化」(5)[了]
2009/02/26 20:34 - AS3.0
前回からの続き。
「そうめん」はとっても便利なツールなのですが、場合によってはその便利な仕様が逆に不便に感じられる局面に遭遇した、そんな過去の体験談。
むかーし昔、勤め先が開催するイベントに使うからと、子ども向けにパズルやクイズといったフラッシュコンテンツを組むよう業務命令を受けました。使ったツールは確か MX。
そのイベントは年に1回定例的におこなわれていて、去年までずっとその AS2 製のコンテンツを使い続けてきたんですが、改造に次ぐ改造で、ソースは見たくないくらいゴチャゴチャしているし、修正してパブリッシュすると動かなくなる場合もある状態になっていたんですわ。
今後のことを考えると今ここでゼロから ActionScript 3.0 で組み直した方がいいなぁ、と思い、企画通すために、半年くらい前だったかなぁ、モックを作り始めました。
手を着けたのは下のサンプルのようなものです。 ステージ左にバラバラに配置されたピースをステージ右の下地の絵に嵌める、絵合わせパズル。
ここに示したサンプルは単にピースを嵌めることしかできませんが、完成版ではピースが全部嵌ったときに絵の説明が出るようになってます。 また絵の全部で5枚あり、連続で5回パズルができる作りになっていました。
画像や説明文の読み込み、連続実行などイベントリスナーや非同期処理がガンガンに出てくるので、これは学習をかねて「そうめん」で作ろうと、とコーディングをはじめたのです。
今現在ピースが何個嵌っているのかをどのように把握しようかと考えたんですが、嵌ったときに当該ピースがカスタムイベントを発行し、それを監視しておいて、ピースの枚数と同じだけカスタムイベントが発行されたら完了にする、という仕様にすることにしました。
このとき、前回示した MainThread で Spirte サブクラスの Dot へやったのと同じ手法で、ピースへのイベント登録をコーディングしたのですが、いざ、骨格を組んで試しに動かしてみたところ、嵌ったピースの数が認識されません。
trace 埋め込みまくって調べたところ、いずれか一つのピースでイベントが駆動したときに、当該ピースだけでなく、すべてのピースのカスタムイベントリスナーが remove されていたことが判明。
あーでもないこーでもないどうしたもんかと仕様の方向性を検討していたら、このパズルを使うイベントの一時休止が決定、パズルのプログラミングはこの時点で頓挫したのでした。
なのでパズルは完成には至らなかったのですが、このときの解決法として考えていたのが、ピースをスレッドにすればこの問題は回避されるのではないかということだったのです。
長々と書いてきましたが、これが Dot を Sprite の拡張クラスではなく、Thread の拡張クラスにしてみた理由です。
思ったとおりイベントリスナーの同時解除問題は回避されました。
まぁデザインパターンを少しばかり齧った今でなら、イベントリスナーが同時解除される状態でも、いろいろ解決手段が見出せそうな気もするんですがねー。
以上、各クラスの解説終わり。情報視覚化ネタ第1回目も終わり。