« drawする時はマスクにご用心 | メイン | AS1MovieClipクラスの問題点 »

AS1MovieClipクラスを作ってみた

fladdict.net blog : processingライクにくめるAS3が欲しいに触発されて、as1記法でMovieClipのメソッドを扱える AS1MovieClip クラスを作ってみました。

ソース

まだ全メソッドを登録していませんが、MovieClipクラスを継承しているので特に不自由なく使えると思います。

以下、使用例。


インポート文はこれ

import com.voidelement.display.AS1MovieClip;


んで、as1ライクな記述がこれ


class Hoge extends AS1MovieClip {
public function Hoge() {
var mc1:AS1MovieClip = createEmptyMovieClip("mc1", 1 );
mc1.a = 0;
mc1.b = 0;
mc1.onEnterFrame = function():void {
this.a += 1;
this.b += this.a;
}
mc1.onMouseUp = function():void {
this.onEnterFrame = null;
trace( this.a, this.b );
}

var mc2:AS1MovieClip = mc1.createEmptyMovieClip("mc2", 1 );
mc2.moveTo( 100, 100 );
mc2.lineTo( 200, 200 );
}
}

深度管理についてはas1を踏襲しているため、すでにインスタンスが配置されている深度に createEmptyMovieClip などで配置しようとすると上書きにより消えてしまいます。
これを実現するにあたって、深度概念が交錯しないように addChildAt メソッドを使用禁止にしました。
あくまでas1の深度ベースでサンプルを組み上げるためのクラスなので、その他のas3クラスとの親和性は多少犠牲にしています。
また、深度管理の都合上 removeMovieClip や swapDepths などの自身を対象とするメソッドについては親が AS1MovieClip かその派生クラスでないと機能しないように制限してあります。

ちなみに _xscale や _yscale などのアンダースコアなプロパティも定義してみました。
as1では0~100ベースだったのに、as3で0~1になったのでよく間違えるorz


それと深度管理するにあたって、Dictionaryクラスがやたらと役に立ちました。
インスタンスと深度値を相互参照することで、インスタンスに直接深度プロパティを持たせずに済んでいます。
他にも便利な使い方があると思うのでそのうちまとめてみる予定。


果たして需要があるのか否や。
突貫で作ったのでコメントぶっ飛ばし状態…後から追加しますが、そもそもこんなクラスをわざわざ使うような人は、as1のメソッドなんてほとんど暗記してるんじゃないかと勝手に予想。
なんだか無駄に張り切りすぎた感があるので、深度関係のところだけ抽出して DepthManager クラスとして作り直した方がいい気もしてきたけど、まだまだ作りかけだしツッコミ大歓迎。

トラックバック

このエントリーのトラックバックURL:
http://void.heteml.jp/mt/mt-tb.cgi/36

コメントを投稿

あわせて読みたい