AS3 は FLASHer には使いにくい?
FLASH ばりばり使ってる人たちのブログを読んでいると、AS3 が使いにくい、という文句が出てきてるようです。
例えば
特に一番不便なのが宣言なしに気軽にSpriteとかにプロパティつけれないとこ。
も~いちいちなにがpublic privateだgetだsetだ!w
Muraken.biz
とか
AS3って、2時間ぐらいでインタラクティブスケッチ作るとか、超不向きじゃね?
processingライクにくめるAS3が欲しい | fladdict
といった感じで。
プログラマ的な感覚からいくと、AS1、AS2 の createEmptyMovieClip で new + addChild するところとか、_x のアンダースコアなところのほうが許せず、私は AS3 になってやっと触れるようになりました。
でも、確かに気軽にごにょごにょっとアニメーション作るには AS3 はめんどくさいところが多そうです。
それを解決するために fladdict さんが 構想中のフレームワーク と、それに触発された void element blog さんの AS1MovieClipクラス がおもしろいので、ちょっと見てみました。
fladdict さん製を見てみた
http://twitter.com/fladdict/statuses/43108192 から開発中のコードがのぞけます。
DynamicSprite クラスの
package sketchbook.display { import flash.display.Sprite; dynamic public class DynamicSprite extends Sprite { } }
という実装が素敵。前出の「Sprite にプロパティつけれない」という問題は解決しますね。
他にも、_global を実現するためのクラスがあったり、描画が簡単になりそうだったり、色を扱うためのクラスライブラリがあったりします。
SpriteHelper はブログの記事にもあるとおり、Sprite を継承するのではなく、クラス内部に変数として保持しています。オブジェクト指向用語でいう委譲になります。
AS1MovieClip (void element さん製)を見てみた
AS1 や AS2 と同じように使える、という点に主眼をおいて作成されています。
深度管理も今まで通り。
createEmptyMovieClip や attachMovie、swapDepths のメソッドはもちろん、_x などのアンダースコアつきのプロパティも使えます。
AS3 ではα値は 0~1 ですが、_alpha では AS1・AS2 時代と同様 1~100 で指定できるようになってます。
バリバリの FLASHer さんは嬉しいんじゃないでしょうか。
AS1MovieClip は MovieClip クラスを継承して実装されています。委譲として実装している fladdict さんと対照的でおもしろい。
delete mc.onEnterFrame できない という話ですが、記事にもある通り Proxy クラスを継承するしかないでしょうが、その場合、継承ではなく委譲で実装する必要が出てきますね。
継承と委譲
それぞれの利点など。
Sprite や MovieClip のことをあえて MC と略します。
- 継承(void element さん)
- new で作成したインスタンスを CS3 や AS3 の MC に addChild できる
- でも、CS3 や AS3 が生成した MC に適用することはできない
- MovieClip の派生クラスを機能拡張することもできない
- 委譲(fladdict さん)
- MC (とその派生クラス)に一皮かぶせることができる
- でも、mc is Sprite や mc is MovieClip が false になる。
- かぶせた中身を取り出すためには、mc.target と書かなきゃならない。
継承や委譲の使い分けについては、オブジェクト指向を語る上では議論が尽きないところで、それぞれにメリット・デメリットがあって難しいところです。
(追記)2007/5/9 0:25
secondlife さんに subtech - Pink Blossom Diary StrikerS - SpriteHelper にて補足してもらってます。stash 案もおもしろいですね。この辺は本当に好みの世界になってきそう。
Progression 開発者の nium さんが、で、結局 FLASHer 的に AS3.0 って・・・ (blog.nium.jp) にて、AS3 の本当にめんどくさいところを書いてくれています。こちらも、かなり同意。特に、イベント登録と、navigateToURL が煩雑になる、あたりは今後も、ライブラリが色々でてきそうな予感。