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で作成できるムービーと
ほぼ同等のことができますが。以下のことが出来ません(私の知る範囲では。どなたか
正しい情報をご存じでしたら指摘してください)。
- ClipEventが使えません。MovieClipのmethodでaddActionが存在するべきで、
sourceforgeのMingのサイトを見ると、追加されるようなことが書いてありますが、
Ming-0.2aにはこのmethodがありません。
- MovieClipシンボルに名前をつけられないので、ActionScriptからMovieClip
オブジェクトの生成ができません。したがって、プログラム内からMovieClipを
ポコポコ生成するような例えばゲームのようなムービーが作れないと思います。
- 音の扱いが貧弱です。Ming-0.2aではMP3ストリームを背景に再生することしか
できません。jaMingを使うとボタンを押した時にPCMやMP3を再生したりも
できます。また、CVSレポジトリの最新版のMingでは音の扱いが拡張されている
ようですが、これらをRubyからあつかうclassはまだ実装されていないようです。
- 日本語の取り扱いができません。これについては、JaMingを使う方法と、
CVSレポジトリから最新版を取ってくるという方法があるようです。私は、
日本語を表示させたい時はすべてイメージにするようにしていますが。
次に用語の違いを説明します。
- FLASHでの「ステージ」と「ムービー」を合わせたものが、MingのSWFMovie
クラスになります。
- FLASHでの「ムービークリップ」は、MingのSWFSpriteクラスになります。
ただし、CVSレポジトリ版ではこのクラスの名前はSWFMovieClipになっており、
Ming-0.2aでもSWFMovieClipクラスという名前が利用できます。従って、Ming-0.2a
を使ってプログラミングする場合でも、SWFMovieClipクラスを使うことを推奨
します。
- FLASHでの「グラフィック」は、MingのSWFShapeクラスになります。
Masahiko KIMOTO <kimoto@ohnolab.org>
Last modified: Fri Dec 26 16:53:43 JST 2003