FLASHの概要

まず、WindowsやMacintoshなどのFLASH 5やFLASH MXを使ってFLASHムービーを 作ったことがあって、FLASHのおおよその構成について理解している人は、この 章を読む必要はありません。この章では、FLASHとはそもそもどういうものかに ついて説明します。ただし、(開発環境の)FLASHとMingでは使っている用語に 弱干の違いがあります。その説明を章末で述べますので、FLASHを理解している 人はその部分だけを読んで頂けば良いと思います。

FLASHとは

FLASHとはもともと単純なムービーを再生するだけのものでした。しかしFLASH 5からは ActionScriptが利用できるようになり、対話的なムービー(最早ムービーとは言えない のですが、ここではムービーという表現を用います)を作成できるようになりました。 簡単なゲームくらいは作れるようになったのです。

Javaアプレットと比較して、動作が非常に軽く計算機資源を浪費しないことや、 Linux用のMacromedia純正プレイヤーがFreeBSDやNetBSDでも動作する(ただしFlash 5 まで)ようになったことから、ある意味対話的なアプリケーションの実行環境と しては最も普及しているものであると言えるでしょう。
最新版(2003年8月現在)のFlash MXでは、Flash 6のムービーが作成できます。 広告などの多くの人を対象としたムービーではまだまだFLASH 5のムービーが多い ですが、最近はFLASH 6のムービーも増えて来ています。


FLASHの構造

おそらくこれを読んでいるほとんどの人が、1度はFLASHムービーを見たことが あるでしょう。長方形の領域に色々な画像が動いたり、クリッカブルイメージが 表示されたり、ボタンが表示されたり、オブジェクトが飛び回ったりするアレです。

ここでは、そのようなFLASHムービーがどういう構造になっているかについて説明 します。下の図を見てください。

ベースになるのは、SWFMovieクラスのインスタンスです。このオブジェクトが、 ムービーの画像サイズなどを決定します。表示される他のオブジェクトは、 すべてSWFMovieクラスのインスタンスの上に乗る(追加される)ことになります。
SWFMovieオブジェクトに乗せられるオブジェクトには、SWFText, SWFShape, SWFButtonなどのクラスのインスタンスがあります。それぞれ、文字、画像、 ボタンの役割を持ちます。
重要なのがSWFMovieClipクラスです。SWFMovieClipクラスは、SWFSpriteクラス とも呼ばれます(SWFSpriteが古い名称です)。SWFMovieClipオブジェクトは、 名前の通りそれ自体がムービーであり、タイムラインを持ちます。また、 SWFMovieClipオブジェクトに、他のオブジェクトを追加することもできます。
SWFMovieオブジェクトはタイムラインを持ちます。単位はフレームで、 毎秒表示するフレーム数は、SWFMovie::setRate()メソッドで指定できます。 SWFMovieオブジェクトのタイムラインが、FLASHムービー全体のタイムラインに なります。SWFMovieClipオブジェクトのタイムラインは、SWFMovieオブジェクト のタイムラインとは独立していますが、単位がフレームであることは同じですし、 表示速度はSWFMovieオブジェクトで指定した表示速度と同じになります。
見方を変えると、SWFMovieオブジェクトを頂点として、その下に木構造状に 様々なオブジェクトが連なっている形になります。そしてこれらオブジェクトの 位置や大きさ、木構造の構成などがタイムラインに沿って変化していくことで、 FLASHムービーが構成されています。


ActionScriptとは

前述のように、FLASHムービーとはオブジェクトが配置されたものが時系列に 並べられたものでしかありません。対話的な操作を行なうためには、オブジェクトに 対する操作への挙動を記述する方法などが必要になります。これがActionScriptです。 ActionScriptはプロトタイプベースのオブジェクト指向処理系です。
ボタンが押された時の処理や、アルゴリズムにもとづいてオブジェクトを移動させる 処理などは、すべてActionScriptを記述しなければなりません。つまり、ある程度 まともなFLASHムービーを作成するためには、Mingやrubyなどの知識に加えて、 ActionScriptの知識が必要になります。Mingの中にはActionScriptのコンパイラが 含まれていて、記述したActionScriptをFLASHムービー中に組み込むことができます。 ActionScriptを記述しないといけないのは、FLASH 5やFLASH MXなどのWindowsや Macintosh上の開発環境でも同じなので、言い方を変えればActionScriptの部分に ついてはUNIXだからといって面倒だとか機能が劣るとかいうことはありません。
FLASHムービーの中ではActionScriptが重要な位置づけを占めているからこそ、 Mingであっても他の処理系と同等のムービーを作成できる、と言っても良いでしょう。

FLASHにおけるオブジェクト指向

ActionScriptはプロトタイプベースのオブジェクト指向言語処理系です。 プロトタイプベースですので、 FLASHの場合は用語に注意しないといけません。まず前々節で述べた クラス(SWFMovieなど)は、Mingでのクラス名ですので、ここでは一旦忘れてください。 FLASH自体にはクラスという概念はありません。プロトタイプに相当するのが、 「シンボル」の定義になります。インスタンスは総て「オブジェクト」と呼ばれ、 シンボルからオブジェクトを生成します。メソッドはシンボルに対しても、 オブジェクト単位でも定義できます。
オブジェクトは基本的に目に見えるモノ(または耳に聴こえる音)です。 ButtonオブジェクトはButtonシンボルから生成されたオブジェクトですし、 MovieClipオブジェクトはMovieClipシンボルから生成されたオブジェクトです。
ここで注意しなければならないのは、SWFMovieClipのインスタンスと MovieClipオブジェクトとは別物であるということです。SWFMovieClipインスタンス はMovieClipシンボルとほぼ同じであり(ただしMingでは、これに名前をつけられない という欠点があります)、SWFMovieClipをSWFMovie::add()メソッドでムービー(または 他のMovieClip)に追加して得られた(addメソッドの返値の)SWFDisplayItem インスタンスが、FLASHのMovieClipオブジェクトに相当します。

FLASHとMingの違い

まず、「出来ること」の違いを述べます。MingではFLASH 5で作成できるムービーと ほぼ同等のことができますが。以下のことが出来ません(私の知る範囲では。どなたか 正しい情報をご存じでしたら指摘してください)。 次に用語の違いを説明します。
Masahiko KIMOTO <kimoto@ohnolab.org>
Last modified: Fri Dec 26 16:53:43 JST 2003