サイトトップ

Director Flash 書籍 業務内容 プロフィール

Adobe Flash非公式テクニカルノート

[シンボルプロパティ]のリンケージで[1フレーム目に書き出し]とは

ID: FN1107001 Product: Flash CS3 and above Platform: All Version: 9 and above/ActionScript 3.0

[ライブラリ]のシンボルにはクラスが設定できます。そのためには、[シンボルプロパティ]ダイアログボックスを開き([ライブラリ]パネルメニューから[プロパティ]を選択)、リンケージセクションで[ActionScript用に書き出し]を選んで[クラス]フィールドに名前(完全修飾名)を入力します。このとき、デフォルトでは[1フレーム目に書き出し]が選択されます(図001)。このオプションの使い方についてご説明しましょう。

図001■[シンボルプロパティ]ダイアログボックスで[ActionScript用に書き出し]を選ぶ
図001上図
図001下図


01 [ActionScript用に書き出し]と[1フレーム目に書き出し]の意味
初めに、[シンボルプロパティ]ダイアログボックスのリンケージセクションにおける[ActionScript用に書き出し]と[1フレーム目に書き出し]の意味を確かめておきましょう。まず、[ActionScript用に書き出し]については、拙著『ActionScript 3.0プロフェッショナルガイド』p.338の説明を引いておきます[*1]

それは第1に、[リンケージプロパティ]ダイアログボックスで指定した[クラス]などのAcrionScript用の設定を、シンボルのデータとともにSWFファイルに書出すことを示します。

そして第2に、ActionScriptで使えるように、シンボルのインスタンスがフレームに配置されていなくても、必ずSWFファイルとして書出すという指定でもあります。

後述するように、ActionScriptを用いれば、シンボルのインスタンスを予めステージに配置することなく、動的に作成することができます。しかし、アニメーションツールとしてのFlashは、ファイルサイズを最適化するため、実際にタイムラインで使われたシンボルのデータのみをSWFに書き出す仕様になっています。[ActionScriptに書き出し]のオプションを選択すると、インスタンスがフレームで使われているかどうかを問わず、SWFファイルへの書出しが行われることになるのです。

Flashムービーのフレーム再生は「プログレッシブダウンロード」です[*2]。したがって、データはフレームごとにSWFに書出されます。そして、シンボルはインスタンスが最初に置いてあるフレームのデータとして扱われます。ところが、インスタンスをフレームに置かず、[ActionScript用に書き出し]て動的につくる場合には、どのフレームで使われるデータなのかわかりません。

そこで、[1フレーム目に書き出し]が選ばれていれば、そのシンボルはメインタイムラインの第1フレームで使われるデータとして、SWFファイルに書出されるのです。逆にいえば、Flashコンテンツ(SWF)の第1フレームが表示される前に、シンボルのデータはダウンロードされます。つまり、第1フレームが表示された瞬間に、シンボルはActionScriptで使える準備が整っていることになります。

[1フレーム目に書き出し]すれば、ActionScriptでいつでも使える反面、コンテンツの第1フレームを表示する前にダウンロードされます。このようなデータが多いと、ステージ全体が背景色のままコンテンツがなかなか表れないこともあります。第1フレームが表示されないのですから、プリローダ(「Now Loading...」などの読込み待ち表示)も役に立ちません。

そこで、[1フレーム目に書き出し]は、チェックを外して、選択しないことができます。その場合、シンボルのデータがSWFファイルのどこに書出されるのかは、Flashのバージョンによって少し扱いが変わってきます。

[*1] 引用の書籍はFlash CS3 Professionalにもとづいています。このバージョンではリンケージのふたつの項目名が少し異なり、[ActionScriptに書き出し]と[最初のフレームに書き出し]となっていました。なお、前者は、英語版の表記が"Export for ActionScript"ですので、現在の項目名が適切でしょう。

[*2]「ストリーミング再生」といわれることもあります。けれど、Adobeのドキュメントでも「プログレッシブダウンロード」と説明しており、こちらの用語が適切と考えられます。

なお、[プロファイラー]を使えば、フレームごとのデータ量が調べられます。詳しくは、「ダウンロードパフォーマンスのテスト」をお読みください。


02 [1フレーム目に書き出し]を選択しない場合のシンボルデータの書出し
[1フレーム目に書き出し](CS4以降)または[最初のフレームに書き出し](CS3)を選択しない場合のシンボルデータがどのように書出されるか、バージョンによる扱いの違いをご説明しましょう。

Flash CS3 Professionalの[最初のフレームに書き出し]
Flash CS3 Professionalで[最初のフレームに書き出し]のチェックを外すと、シンボルのデータは原則どおりに扱われます。つまり、タイムラインにインスタンスが置かれていないかぎり、シンボルはSWFに書出されません。

ただし、シンボルに設定したクラスは、スクリプトとして使われていればSWFに含められます。したがって、クラスのインスタンスは動的につくれます。けれど、表示するシンボルのデータがないので、タイムラインの表示リストに加えてもなにも表示されないことになります。

シンボルのインスタンスとして表示したいなら、原則どおりタイムラインに置けばよいということです。置き場所は、インスタンスを初めてつくるフレームかそれよりも手前であれば、どのフレームでも構いません。できればメニュー画面など、他のデータのダウンロードやアニメーションとぶつからない場所を選ぶとよいでしょう。インスタンスはステージに表示する必要はなく(DisplayObject.visibleプロパティをfalseに設定してよく)、ステージの外に配置しても差支えありません。

Flash CS4 Professional以降の[1フレーム目に書き出し]
Flash CS4 ProfessionalやFlash Professional CS5および5.5では、リンケージで[1フレーム目に書き出し]の選択を外しても、クラスが設定されていればシンボルのデータはSWFに書出されます。

インスタンスがタイムラインに置かれていないと、シンボルのデータはリンケージに設定したクラスとともに扱われます。そのため、クラスのインスタンスを動的につくってタイムラインの表示リストに加えれば、シンボルのインスタンスとして表示されます[*3]。ただしデフォルトでは、クラスが書出されるのは1フレーム目です(次項参照)。つまり、シンボルのリンケージで[1フレーム目に書き出し]のチェックを外した意味がなくなります。

インスタンスをタイムラインに置けば、原則とおりシンボルはそのフレームのデータとして書出されます。したがって、Flash CS3と同じく、[1フレーム目に書き出し]しないときは、インスタンスを予めタイムラインに置いておくべきでしょう。

[*3] Flash CS4およびCS5では、標準コンポーネントを[1フレーム目に書き出し]しないとき、インスタンスを予めタイムラインに置かないと、動的につくったインスタンスが正しく表示できないようです(図002)。CS 5.5ではこの問題が解消されました。

図002■動的につくったButtonインスタンスがタイムラインに正しく表示されない

図002上左図

図002中左図
図002右上図
図002下図

03 クラスを書出すフレーム
ActionScriptで定義したクラスは、デフォルトでは1フレーム目に書出されます。けれど、この設定は[パブリッシュ設定]または[ActionScript設定](CS5以降)で変えられます。[ActionScript 3.0の詳細設定]ダイアログボックスで、[クラスを書き出すフレーム]フィールドに番号を入力します。ActionScriptで定義したクラスすべてに対する設定で、シンボルのようにひとつひとつを別個のフレームに振分ける手だてはありません。大きなライブラリやフレームワークを使うとき、クラスのダウンロードにもプリローダを設けたいといった場合に利用できます。

図003■[ActionScript 3.0の詳細設定]ダイアログボックスで[クラスを書き出すフレーム]に番号を入力する
図003

[クラスを書き出すフレーム]を(たとえば2に)変更すると、[シンボルプロパティ]ダイアログボックスのリンケージの項目も、[1フレーム目に書き出し]ではなく設定したフレーム番号に変わります(図004)。

図004■[シンボルプロパティ]ダイアログボックスにおけるリンケージのフレーム番号が変わる
図004


作成者: 野中文雄
作成日: 2011年7月1日


Copyright © 2001-2011 Fumio Nonaka.  All rights reserved.