[Astro] Vector クラス(1)
2008/05/22 21:36 - Astro
僕様ちゃん的には 3D Effects に目を奪われがちな Astro ですが、ココとか見ると Vector クラスもスゴそうじゃないの。
Array 比、Vector で3倍速、Shader + Vector だと実に10倍速という驚異の速度。 それにしても Vector の各要素を BitmapData 経由で更新って、一体全体何が起きてるんですか?
叩き出された速度から思うに、基礎理論的にはとても凄いということは分かりますが、応用学問的にどのようなプロダクトに結実するのか全く想像ができません。
でもまぁそういったことは ActionScript の神々にお任せして、へっぽこーダーなワタクシといたしましては、Array よりも速い配列というポジションで Vector をローテクに使っていこうと思います。
あるいは皆さんもそうかもしれませんが、実は私、Array を多用しています。
たとえばモーションタイポ作品を例に挙げるなら、各文字オブジェクト群は、生成時 push なり unshift なりで Array に格納します。 そして、文字を移動させるときなどは Array 全件舐めて、ひとつずつ要素の文字オブジェクトにアクセスして Tweener に送る、というような処理をおこなっています。
ぶっちゃけ、モーションタイポ作品に限らず、私の作るムービーのほとんどが、多数の同一クラスオブジェクト(もちろん表示オブジェクトのサブクラス)を Array で管理して、弄るときには Array 全件を舐めるという構造で成り立っているんです。
だから「格納する要素はすべて同じ型でなくてはいけない」という Vector の特性は、個人的には制約どころか、それで速くなるならむしろ大歓迎です。
連続した配列という規制もまたしかり。 生成時に while ( i-- ) {} で回せなくなるけど(あ、でも length 指定すれば回せるか)、for ( var i:int=0; i<num; i++ ) {} で回せばいいだけだしぃ。
なぁんてステキなクラスなの、Vector って!
積極的に Array から Vector に乗り換えちゃうよオレは。
そんなわけで、Array から Vector への移行について、これからいろいろ検証してエントリーしてこうと思います。 っても Array の代替ゆえ大したことは検証しませんが。
まぁ実行速度に影響与えるほどでっかい Array なんて使ってなかったですけどねー。 それにプリミティブ型の要素を Array で管理することもあまりなかったしー。
速度を求めるならもっと別なボトルネックがあんだろが、というご助言は至極ごもっともですが耳を貸さずに Vector 話を進めます。
参考ページ
- FlashPlayer10のVectorについて分かっていることまとめ
- FlashPlayer10のVectorについて更に色々(ともに from BeInteractive! )
シリーズ
- Vector クラス(6) ~Vector を返す関数~
- Vector クラス(5) ~多次元配列~
- Vector クラス(4) ~生成時に要素格納~
- Vector クラス(3) ~コピー~
- Vector クラス(2) ~要素へのアクセス~