Flash習作 「ShakeBox」
ActionScriptから貼り付けてあるページ(HTML)上のJavaScriptを呼び出せることがわかったので、ためしに作ってみました。
ここで動かせます
→ShakeBox
クリックするとiconちゃんがでてきて跳ね回ります。
ウィンドウを移動すると・・
【操作方法】
まずは「サブウィンドウを開く」ボタンで、サブウィンドウを開いてください。
クリック:iconちゃん出現
ウィンドウのドラッグ:ウィンドウが動きます(あたりまえか)
iconちゃんがウィンドウの端にあたると跳ね返ります。ウィンドウを振ってみてください。
10回跳ね返ると消滅します。
【動作環境】
要Flash8以降
(ケータイでは動きません)
Windows XP上のFirefox3.5およびInternetExplorer6で動作確認しています。
MacOSXやWindows7ではなんか動きがおかしいとの話?
【技術的な話】
ソースはActionScript2.0の文法で書いてMTASCでコンパイルしてswfmillで、Flash8以降用のSWFファイルを生成しています。
ActionScriptからは、ExternalInterface.callを使ってJavaScriptを呼び出しています。
JavaScriptでは、ウィンドウの位置やフォーカスの状態を取得しています(IEとFirefoxで取得方法が異なるのはちょっと面倒ですね)。
iconちゃんはそれぞれMovieClipです。そのまま配置すると中心座標が、左上になってしまってちょっと使いづらいので、MovieClipにさらに子MovieClipを作って高さと幅の半分だけ座標を左上にずらして配置しています。
動作は、各MovieClip生成時にonEnterFrameに登録してます。(iconちゃん同士の反射がテキトーなのであとで改良します)
あと生成時に、MovieClip参照用のArrayに追加してます。他のiconちゃんとの当たり判定を行うときは、参照用のArrayから検索しています。なんか2重管理っぽいけど、普通はどうやるんだろう。
MovieClipのenableフィールドがfalseになってたら、Arrayからの削除してからunLoadMovieしてます。
とりあえずソースはこちら
→shakebox_src20091102.tar.gz
明日は定例のSDL お勉強会があるので、こいつの改良をテーマにしようと思います。
(iframe → Google Gadget コンバータを使わせていただいています。)