Tweener.registerSpecialProperty(6)
2007/12/21 23:17 - tweener
Matrix.b と Matrix.c を同時にトゥイーンさせるサンプルとして、プロパティの取得および更新メソッドを Matrix.b、Matrix.c それぞれ別々に用意するという頭の悪いコードを前回示しました。
今回は、単一のプロパティの取得および更新メソッドで Matrix.b、Matrix.c 両方を処理するコードを書いてみます。
Swf は前回のものと全く同じ挙動なので、今回は載せません。
<Matrix.b 用> Tweener.registerSpecialProperty( "_b" , _mat_get , _mat_set , [ "b" ] ); <Matrix.c 用> Tweener.registerSpecialProperty( "_c" , _mat_get , _mat_set , [ "c" ] );
上記のとおり、特殊プロパティを _b と _c、ふたつ定義しています。
そして、それぞれの第2、3引数を見てのとおり、そのプロパティ取得・更新メソッドは _met_get、_mat_set とどちらも同じものになっています。
単一のプロパティ取得メソッドで複数のメソッドの取得を、単一のプロパティ更新メソッドで複数のメソッドの更新をおこなっているわけですね。
ポイントは registerSpecialProperty で第4引数を使うことです。
このシリーズの第2回で示したとおり、registerSpecialProperty は全部で5個の引数を取ります。
第2、3引数で指定するプロパティ取得・更新だけでももちろんものになるんですが、さらにできることを広げるための変数が、第4番目の引数である配列です。
前々回、さらっと触れましたが、Tweener.updateTweenByIndex メソッドにおいて、registerSpecialProperty の第4引数である Array は、プロパティ取得メソッドでは第2引数として、更新メソッドでは第3引数として、そのまま引き継ぐよう定義されています。
で、今回の Matrix.b と Matrix.c のプロパティ取得・更新メソッドでは、プロパティである "b" と "c" を String として受け取るように registerSpecialProperty でコーディングしてあります。 上述した第4引数の使用ですね。
そのことにより、下記のとおりプロパティ取得・更新メソッドを抽象化することができるわけです。
<プロパティ取得> private function _mat_get( obj:Object , param:Array , extra:Object=null ):Number { return obj.transform.matrix[ param[0] ]; } <プロパティ更新> private function _mat_set( obj:Object , value:Number , param:Array , extra:Object=null ): void { var m:Matrix = obj.transform.matrix; m[ param[0] ] = value; obj.transform.matrix = m; }
シリーズ
- Tweener.registerSpecialProperty(5)
- Tweener.registerSpecialProperty(4)
- Tweener.registerSpecialProperty(3)
- Tweener.registerSpecialProperty(2)
- Tweener.registerSpecialProperty(1)
関連シリーズ
- Tweener.registerSpecialPropertySplitter(6)
- Tweener.registerSpecialPropertySplitter(5)
- Tweener.registerSpecialPropertySplitter(4)
- Tweener.registerSpecialPropertySplitter(3)
- Tweener.registerSpecialPropertySplitter(2)
- Tweener.registerSpecialPropertySplitter(1)