FLASH ばりばり使ってる人たちのブログを読んでいると、AS3 が使いにくい、という文句が出てきてるようです。
例えば
特に一番不便なのが宣言なしに気軽にSpriteとかにプロパティつけれないとこ。
も〜いちいちなにがpublic privateだgetだsetだ!w
Muraken.biz
とか
AS3って、2時間ぐらいでインタラクティブスケッチ作るとか、超不向きじゃね?
fladdict » processingライクにくめるAS3が欲しい
といった感じで。
プログラマ的な感覚からいくと、AS1、AS2 の createEmptyMovieClip で new + addChild するところとか、_x のアンダースコアなところのほうが許せず、私は AS3 になってやっと触れるようになりました。
でも、確かに気軽にごにょごにょっとアニメーション作るには AS3 はめんどくさいところが多そうです。
それを解決するために fladdict さんが 構想中のフレームワーク と、それに触発された void element blog さんの AS1MovieClipクラス がおもしろいので、ちょっと見てみました。
http://twitter.com/fladdict/statuses/43108192 から開発中のコードがのぞけます。
DynamicSprite クラスの
package sketchbook.display { import flash.display.Sprite; dynamic public class DynamicSprite extends Sprite { } }
という実装が素敵。前出の「Sprite にプロパティつけれない」という問題は解決しますね。
他にも、_global を実現するためのクラスがあったり、描画が簡単になりそうだったり、色を扱うためのクラスライブラリがあったりします。
SpriteHelper はブログの記事にもあるとおり、Sprite を継承するのではなく、クラス内部に変数として保持しています。オブジェクト指向用語でいう委譲になります。
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 と略します。
継承や委譲の使い分けについては、オブジェクト指向を語る上では議論が尽きないところで、それぞれにメリット・デメリットがあって難しいところです。
secondlife さんが subtech - Pink Blossom Diary StrikerS - SpriteHelper にて補足してもらってます。stash 案もおもしろいですね。この辺は本当に好みの世界になってきそう。
Progression 開発者の nium さんが、で、結局 FLASHer 的に AS3.0 って・・・ (blog.nium.jp) にて、AS3 の本当にめんどくさいところを書いてくれています。こちらも、かなり同意。特に、イベント登録と、navigateToURL が煩雑になる、あたりは今後も、ライブラリが色々でてきそうな予感。
標準Adobe AIR完全解説 に共著者として参加しました。