Sprite(2) ~ Sprite と createEmptyMovieClip ~
2006/11/11 14:10 - AS3.0
Sprite(1) から続き
そのようなコーディング作法を採る私にとって AS3.0 の衝撃ベストワンは Sprite です。
もうこのためだけに AS3.0 に切り替えても一片の悔いなし! ってくらいステキ過ぎ。
Sprite のオレ的素敵ポイントは 2 つあります。
まず new Sprite() で新規のオブジェクトが作れる簡便さに萌えまくり。
今までは createEmptyMovieClip( 名前 , 深度 ) と、引数として名前を入力する必要がありました。 しかし、配列を使ってムービークリップ群にアクセスする私としては、名前考えるのも、それを記述するのもまったくの徒労。そしてメモリのムダ。
ウンザリの極みだったムダな徒労が消え失せて、誠にもってありがたいことであります。
深度もなくなって、addChild 任せってのも、ちょっとイイかも( addChild の項で検証予定)。
次に、クラスを適用するためだけのムービークリップを作らなくてもよくなったこと。
今までは MovieClip を継承していても、Class 内で子ムービークリップを生成することができなかったので、以下のような手順をとっていました。
- メインタイムラインにおける処理
- ステージ用ムービークリップを生成
- ステージ用クラスを生成
- 1. のムービークリップをそのクラスのコンストラクタ引数とする
- ステージ用クラス内における処理
- コンストラクタ引数のステージ用ムービークリップを対象に createEmptyMovieClip でポイント用ムービークリップを生成
- ポイント用クラスを生成
- 1. のムービークリップをそのクラスのコンストラクタ引数とする
あぁああっ、めんどくさいっ!
ところが AS3.0 では Sprite を継承していれば、それぞれ 2. だけで済みます。
○メインタイムライン
var _stage:MovieClip = createEmptyMovieClip( "stage_mc" , 0 );
var _stage_class:StageClass = new StageClass( _stage );
○ステージ用クラス内
for ( var i:Number=0; i<5; i++ ) {
var _point:MovieClip = STAGE_MC.createEmptyMovieClip( "p_"+i , i );
var _point_class:PointClass = new PointClass( _point );
}
<AS3.0 版>
○メインタイムライン
var _stage_class:StageClass = new StageClass();
addChild( _stage_class )
○ステージ用クラス内
for ( var i:Number=0; i<5; i++ ) {
var _point_class:PointClass = new PointClass();
addChild( _point_class )
}
あー、すっきりした。
- 私の Flash 作品の基本構造ソース( AS2.0 版 7.49 KB )
- 私の Flash 作品の基本構造ソース( AS3.0 版 6.58 KB )
ステージ上に 5 つのポイント(正方形)を生成し、横に並べる処理
なぜ自分的に MovieClip ではなく Sprite が好ましいかというと、タイムライン関連を忘れても良いというのが、脳の負担を多少なりとも軽減してくれるからです。
スクリプトでムービークリップを生成している者にとってはタイムラインは無用の長物。 そしてタイムラインに関わる各メソッドも無用の長物。
実際私は AS2.0 で class を使うようになってから、ルートタイムライン以外にタイムラインを使っていません。 タイムライン周りを脳ミソからバッサリ抹消しても問題なさげ、というのもちょっとした魅力です。
自分としては、今後は Sprite 一辺倒で MovieClip を使うことは無いんじゃなかろうか。
もうそれくらい Sprite の虜です。
Sprite(3) へ続く