// おまけ
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に最適化された実装がなされる可能性はあります。