サイトトップ

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

Macromedia MAX 2004 Japan
ActionScript 2.0とは入門編

■サンプルファイル: ActionScript2Basics.zip(Zip圧縮/約16KB)

1 厳密な型指定
1-1 ver宣言と型指定

代入の左辺と右辺の型をチェック

my0_str = 1;  // 型指定なし→エラーなし
var my1_str:String = 1;  // ストリング型指定→エラー
var my2_str:String = Math.sin(0);  // ストリング型指定/戻り値数値→エラー
nMyNumber0 = "string";  // 型指定なし→エラーなし
var nMyNumber1:Number = "string";  // 数値型指定→エラー

1-2 両辺で型指定されていることが必要
var my_txt:TextField;  // TextField型指定
var nMyNumber2:Number = my_txt.text;  // 上記指定なければエラーなし
var nMyNumber3:Number = _root;  // コンパイルエラー
trace(this);  // 出力: _level0
var nMyNumber3:Number = this;  // thisは型指定されない(エラーなし)

// 第1フレームアクション
var my_str:String = "string";
// 第2フレームアクション
var nMyNumber:Number = my_str;  // エラーなし

// おまけ
var my_str:String = "string";
var nMyNumber:Number = this.my_str;  // thisのプロパティも型指定なし
trace(nMyNumber);

1-3 関数の場合
スクリプト■引数と戻り値の型指定
(StrictTyping.fla)
// フレームアクション
function setComma(number_str:String):String {
  if (number_str.length>3) {
    number_str = arguments.callee(number_str.substr(0, -3))+","+number_str.substr(-3);
  }
  return number_str;
}
trace(setComma("1234567890"));  // 出力: 1,234,567,890

2 Flash Player 7書出しとActionScript 2.0
2-1 Flash Player 7書出し

2-1-1 ECMA-262第4版準拠。大文字小文字の区別や未定義値の扱い、ストリングのブール(論理)値変換結果が異なります。

// フレームアクション
myVar = "before";
MYVAR = "AFTER";
trace([myVar, MYVAR]);

// 出力: Flash Player 7+ActionScript 1.0
before,AFTER

// 出力: Flash Player 6+ActionScript 2.0
AFTER,AFTER

2-1-2 ActionScriptの最適化 − レジスタの拡張(参考: [Inside Flash MX 2004] > [18. ActionScript optimizations: Register allocation])
最大256個のレジスタがパフォーマンスを向上します(Flash MXまでは4個)。なお、[Flash Player 6r65用に最適化]オプションでも、最適化の効果があります。

2-2 ActionScript 2.0
2-2-1 型指定とクラス定義

2-2-2 コンポーネントの扱いに注意
MXとMX 2004のコンポーネントは混在させない

3 クラス定義 − ActionScript 1.0の場合
3-1 プロトタイプ
prototypeは、メソッドとプロパティの格納庫。インスタンスを生成する際の「ひな形」あるいは「テンプレート」となるオブジェクトです。オブジェクトの「基本プラン」といってもよいでしょう(『オブジェクト指向で考えるActionScript』p.251〜)。

3-2 ムービークリップシンボルにクラスを定義(ActionScirpt1Class.fla)
// ムービークリップシンボル: クラス定義の対象
// リンケージ識別子: "Pen"
// 第1フレームアクション
#initclip
function MyClass() {  // コンストラクタ関数
}
MyClass.prototype = new MovieClip();  // MovieClipを継承
MyClass.prototype.nDeceleration = 0.2;  // プロパティのデフォルト値設定
MyClass.prototype.easeTo = function(nX, nY) {  // メソッド定義
  this.nTargetX = nX;
  this.nTargetY = nY;
  this.onEnterFrame = function() {
    var nDistanceX = this.nTargetX-this._x;
    var nDistanceY = this.nTargetY-this._y;
    if (Math.abs(nDistanceX)<0.5 && Math.abs(nDistanceY)<0.5) {
      this._x = this.nTargetX;
      this._y = this.nTargetY;
      delete this.onEnterFrame;
    } else {
      this._x += nDistanceX*this.nDeceleration;
      this._y += nDistanceY*this.nDeceleration;
    }
  };
};
Object.registerClass("Pen", this.MyClass);  // シンボルにクラスを登録
delete this.MyClass;
#endinitclip

4 クラス定義 − ActionScript 2.0の場合
4-1 クラス

・外部ActionScriptファイルに定義 コードはコンパイル時にSWF書出しされます。
・ファイル名はクラス名と同一
・コンストラクタ関数はクラスと同名 存在しなければ、空の関数が自動作成されます。
・ プロパティ/メソッドを定義 型指定が可能です。クラスのプロパティは関数外に宣言し、メソッドはfunctionとして定義します。
extendsで継承

4-2 ムービークリップシンボルにクラスを定義
4-2-1 ActionScript 2.0クラス定義ファイルの作成
・外部ActionScriptファイルとして作成
・保存場所はクラスパス
  [環境設定]>[ActionScript]>[ActionScript 2.0設定]
  [パブリッシュ設定]>[ActionScript 2.0]-[設定]
・ムービークリップシンボルの[AS 2.0クラス]に設定

4-2-2 ActionScript 2.0クラス定義サンプル(MyClass.as/ActionScirpt2Class.fla)
// ActionScript 2.0クラス定義ファイル: MyClass.as
class MyClass extends MovieClip {  // MovieClipを継承したクラス定義
  // プロパティ宣言
  var targetX:Number;
  var targetY:Number;
  var deceleration:Number = 0.2;
  function MyClass() {  // コンストラクタ関数(省略可能)
  }
  function easeTo(x:Number, y:Number):Void {  // メソッド定義
    targetX = x;
    targetY = y;
    this.onEnterFrame = function() {
      var distanceX:Number = targetX-_x;
      var distanceY:Number = targetY-_y;
      if (Math.abs(distanceX)<0.5 && Math.abs(distanceY)<0.5) {
        _x = targetX;
        _y = targetY;
        delete this.onEnterFrame;
      } else {
        _x += distanceX*deceleration;
        _y += distanceY*deceleration;
      }
    };
  }
}

5 コンパイル時実装ということ
5-1 SWF書出し時の型チェック ー シンタックスチェック
実際にスクリプトを実行したときの型は、チェックされません。

5-2 ActionScript 2.0シンタックスは1.0と同値のバイトコード(参考: [Inside Flash MX 2004] > [26. ActionScript 2.0])
動作は、基本的に1.0と異なるところはほとんどありません。将来、2.0に最適化された実装がなされる可能性はあります。


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