レポート

これからのFlash開発者への道しるべ─SWF研究会#2@東京 実施レポート

この記事を読むのに必要な時間:およそ 4.5 分

Flash Runtime Engineの実装

発表枠の最後は,株式会社ディー・エヌ・エー紀平氏より「Flash Runtime Engineの実装」についてお話を頂きました。

紀平氏

紀平氏

実際に利用した資料の公開はないものの,当日行われたUSTREAMが公開されているうちは実際の説明とともに視聴することをお勧めします。

実は本勉強会,先の3名に講演いただいた内容が「バイナリのパース(読み方⁠⁠シェイプの詳解とSVG変換」⁠アクションスクリプト実行処理系」で,これらを組み合わせて動かすエンジンを作成すれば,FlashPlayerができる,と今回の勉強会の順序自体に大きな意味が隠されていると話し,エンジンの実装=いわゆるメインループの実装であると切り出しました。

FlashPlayerにおけるメインループとは

  • タイムラインを1つ動かす
  • バーチャルマシンを動かす
  • 持っているデータを描画する

これを秒間何回も動かすことです。実際の所,これだけで終わりではあるものの,これらを自力で実装するには非常に難易度が高い(全てがラスボス級)と話しました。

ライムラインとはFlashの時間軸

まず,説明用に簡単な30フレームのタイムラインにて,それぞれのフレームでどのようなことが行われているかについて説明がありました。

Frame動作
1初期シェイプの配置アクションの実行
DefineShape
PlaceObject
PlaceObject
DoAction
ShowFrame
2~9ShowFrame×8
10新しいシェイプ・MCの追加
DefineShape
PlaceObject
ShowFrame
Frame動作
1それぞれの動作
4それぞれの動作
6それぞれの動作
13それぞれの動作
16それぞれの動作
11~19ShowFrame×9
20シェイプの削除
PlaceObject
RemoveObject
ShowFrame
21~29ShowFrame×9
30最終フレーム
ShowFrame
End

またこのとき,エンジンでの処理としてはDisplay Listに沿って描画する。無駄なリソースは持たず,たとえば同じ画像は1つのものを複数箇所へ描画して対応すると説明がありました。

タイムライン

それまでの講演で複数の方々から説明があった通り,タイムラインには幾つか困った問題もあり,主に処理(実行)順序の問題を指摘しました。

実際に先に説明したタイムラインを用い,どのようにタイムラインを処理するかと投げかけ,

  • フレーム10ではA → B
  • フレーム11ではB → A

と突然変わってしまい,しかも公式ドキュメントにもないので,結果エンジニアが検証しながら試すしかないと指摘していました。

バーチャルマシンの実行の基礎

タイムラインの処理時に,そのフレームで必要なアクションスクリプトの順序を記憶し,キューの先頭から実行…というわけにも行かず,いろいろと問題がある点を説明しました。このあたりも試行錯誤で試していくことが求められていると言います。

VMの落とし穴

callとgotoFrameが存在し,callはその場で指定されたframeのスクリプトを呼び出し,call(4)と記述すれば4フレーム目のスクリプトを呼び出します。一方gotoFrameが実行されると,現在のカレントフレームを新しいフレームに即時変更,新しいフレームに付随するアクションスクリプトをキューの最後に追加,そのまま残りのスクリプトを実行します。すなわち,カレントフレームが思っていた場所と変わってしまうため注意が必要と指摘しました。

その他泣き所

その他の問題として,⁠数値,文字列両方が混在」⁠部分的に大文字小文字を判断したり(しなかったり)する」⁠基本正常系のドキュメントしかなく,失敗時の挙動似ついては仕様書が公開されていない」⁠リードオンリーのプロパティのサンプルプログラムで代入している(!⁠⁠」など,非常に苦労する部分が多いと説明がありましたが,一番の問題としては,⁠仕方なくではあるものの)世の中の大部分のFlashエンジニアはFlashPlayerの異常系やバグ挙動を平然と利用してコンテンツを作っていることが多く「バグまで実装しないといけない。」と指摘がありました。

最後に,公式な資料,公開された仕様などが曖昧な部分に問題は多いと指摘し,取り組むエンジニアは心を強く持って取り組んでほしいとする一方で,⁠ActionScriptを扱わない」⁠クリッピングやモーフィングや着色などを扱わない」などと割り切った簡易FlashPlayerであれば,結構簡単にできるのも事実であり,興味があればぜひとも挑戦してほしいと締めくくりました。

著者プロフィール

高岡将(たかおかすすむ)

大手金融,独立系SIerにて気がつけば計18年以上のキャリアを重ねる。バランス感覚に長け,インフラ/アプリ,プレイヤ/マネージャなど関係なくこなし,「いそうだけどいないタイプ」と評価される。

仕事以外では,自転車,ジョギング,サックス等を趣味にし,密かに「エンジニアと健康」についてダイエット成功論の連載を企む。