サイトトップ

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

F-siteセミナー

2004のActionScriptって?どこが変わるの?変わらないの?

Date: 2003年11月8日 Product: Flash

Platform: All
Viersion: MX 2004

1. メニューとインターフェイス
よく使われるフレーム操作のコマンドが、[編集]と[挿入]、[修正]の各メニューに離散してしまった(図001)。ショートカットキーはMXと変わらないので、慣れたユーザなら問題ない。

図001■離散したフレーム操作のコマンド

[フレームの削除]は[編集]メニュー


[フレーム]や[キーフレーム]、[空白キーフレーム]挿入は[挿入]メニュー


[キーフレームに変換]と[空白キーフレームに変換]は[修正]メニュー。[キーフレームを削除]はなぜ[フレームの削除]と一緒でない?

「シーン」や「シンボルの編集」を切替える「編集バー」の位置が、Flash 5と同じタイムライン上部に戻ってしまった(図002)。

図002■タイムライン上部に戻った編集バー

しかし、編集バーを[command]/[Alt]+ダブルクリックで、タイムライン下に移動できる(図003)。

図003■タイムライン下に移動した編集バー

また、フレームやインスタンスを選択して表示するコンテクスト/ショートカットメニューから、[アクション]がなくなった(図004)。ショートカットは[F9](ただし、Pantherでは注意が必要)、フレームの場合は[option]/[Alt]+ダブルクリックでもよい。

図004■コンテクスト/ショートカットメニューから[アクション]が消えた

その他、中心からの図形描画([option]/[Alt])や[保存して最適化](コンパクト保存)などが追加された。

2. ActionScriptで注意すべき変更点
ActionScriptの仕様がECMA-262第4版に準拠した。[Flash MX 2004でハマりがちな問題点]参照。

3. MovieClipLoaderクラス
外部SWFまたはJPEGファイルのロード中の経過を確認したり、読込み待ちの処理ができる。

MXまでは、onClipEvent (data)ハンドラで、ロード済みバイト数をチェックして読込みを待つのが普通だった(スクリプト1。なお、[MovieClip.loadMovieで外部ファイルを読込む]参照)。

スクリプト1■MXまでの外部ファイルロード待ち処理
// MovieClip: 外部ファイルを読込むターゲット
// MovieClipアクション
onClipEvent (data) {
   if (this.getBytesTotal()>0 && this.getBytesLoaded()>=this.getBytesTotal()) {
     // ロード完了時の処理
   }
}

MovieClipLoaderクラスを使った外部SWFファイルのロード処理(スクリプト2)。ロードしたSWFを指定フレームから再生するサンプルSWF/FLAファイル(Zip圧縮:約353KB)を参照。

スクリプト2■MX 2004のMovieClipLoaderを使用した外部ファイルロード待ち処理
*MovieClipLoaderインスタンスに直接イベントハンドラを定義するスタイルは、サポートされないこととなりました。そのため、リスナーオブジェクトを作成するスタイルに修正しました。(2004.6.23)
// タイムライン: ターゲットのMovieClipインスタンスmy_mcを配置
// フレームアクション
// *2004.6.23修正前の処理はコメントアウト
my_mcl = new MovieClipLoader();  // MovieClipLoaderインスタンスの生成
oListener = new Object();  // リスナーオブジェクト作成
// my_mcl.onLoadStart = function(target_mc) {
oListener.onLoadStart = function(target_mc) {
   // ロード開始時の処理
};
// my_mcl.onLoadError = function(target_mc, error_str) {
oListener.onLoadError = function(target_mc, error_str) {
   // ロードできなかったときの処理
};
// my_mcl.onLoadProgress = function(target_mc) {
oListener.onLoadProgress = function(target_mc) {
   // ロード中の処理
};
// my_mcl.onLoadInit = function(target_mc) {
oListener.onLoadInit = function(target_mc) {
   // ロードしたSWFの第1フレームでの初期化処理
};
my_mcl.addListener(oListener);  // リスナーに登録
// 外部SWFファイル"test.swf"をインスタンスmy_mcにロード
my_mcl.loadClip("test.swf", my_mc);

コンポーネントのスクリプティングも、また変わった。リスナーオブジェクトを作成して、コンポーネントインスンタンスのイベントリスナーに登録する(スクリプト3)。

スクリプト3■ComboBoxの選択によりスナーのイベントハンドラを呼出す
// タイムライン: ComboBoxコンポーネントインスタンスmy_cbを配置
// 第1フレームアクション
myListener = new Object();  // リスナーオブジェクトの作成
myListener.change = function(myEvent) {  // changeイベントハンドラメソッド定義
   // 選択された項目のラベルを取得
   var selectedLabel = myEvent.target.selectedItem.label;
   // 項目選択時の処理
};
// コンポーネントインスタンスのchangeイベントにリスナーオブジェクトを登録
my_cb.addEventListener("change", myListener);

4. Dataコンポーネント(Professional)
Flash MX 2004 Professionalを使ってGoogle検索を行うサンプルが、Macromedia Flash Developer Centerに[Building a Google Search Application with Macromedia Flash MX Professional]という記事の中で紹介されている 。

[注記]このサンプルを試すには、Google Web APIのライセンスキー(license key)を取得して、WebServiceConnectorコンポーネントインスタンスに設定する必要がある。設定方法は、以下のとおり。

[1]ステージ左側の[スクリーンアウトラインペイン]で、スクリーンfrmSearchをクリックして、ステージの右外側上部に配置されたWebServiceConnectorインスタンスGoogleSearchを選択する。

[2][コンポーネントインスペクタ]の[バインディング]タブを表示して、バインディングリストからparams:keyを選択したら、パネル下側のバインディング属性ペイン内のプロパティ[bound to]に取得したライセンスキーを入力する。

コンポーネントを使ってXMLデータを読込み、必要なデータを取出して表示する方法については、「XMLConnectorとデータバインディング」を参照。

5. ActionScript 2.0(スクリプトエディタはProfessionalのみ)
ActionScript 2.0は、1.0と併存する。Flash MX 2004 ProfessionalとStandardの位置づけと同様。機能的に便利だとおもう人が、選択して使えばよい(ただし、混在した記述は避ける。コンポーネントの2.0版と1.0版は、同一ムービー内で同時に使えないと思った方が安全)。

また、ActionScript 2.0は、現状ではSWF書出し時に1.0に変換されてコンパイルされる(JavaやC++と動作の異なる場合があるのは、その理由によることが少なくない)。

ActionScript 2.0でクラス定義ファイルを作成し、FLAムービーと同階層に保存する(スクリプト4)。サンプルのFLAおよびASファイル(Zip圧縮:約8KB)を参照。

スクリプト4■ActionScript 2.0クラス定義ファイル
// ファイル: MyMovieClip.as
// クラスMyMovieClip定義
class MyMovieClip extends MovieClip {
  // プロパティ宣言
  var targetX:Number;
  var decelaration:Number = 0.2;
  // コンストラクタ定義
  function MyMovieClip() {
  }
  // メソッドeaseOut定義
  function easeOut(nTargetX:Number, nDecelaration:Number):Void {
    targetX = nTargetX;
    if (typeof nDecelaration == "number") {
      decelaration = nDecelaration;
    }
    this.onEnterFrame = function() {
      _x += (targetX-_x)*decelaration;
    };
  }
}

ムービークリップシンボルの[シンボルプロパティ]ダイアログボックスの[AS 2.0クラス]にクラス名を入力して、シンボルとクラスとの関連づけができる(図005)。'Object.registerClass'メソッドは不要になる。

図005■[シンボルプロパティ]の[AS 2.0クラス]にクラス名を設定

'Object.registerClass'メソッドを使う必要がなくなる

ActionScript 2.0を使ったクラス定義について、詳しくは「オブジェクト指向プログラミング」またはオンラインヘルプ「ActionScriptリファレンスガイド」をご参照ください。

_____

作成者: 野中文雄
作成日: 2003年11月16日


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