タグ

ブックマーク / f-site.org (42)

  • [AS3] パフォーマンス向上のヒント

    12月4日土曜日に開かれたFITC Tokyo 2010で、Mike Chambers氏は「Flashで作成する高性能モバイルコンテンツ」と題するプレゼンテーションをされました。その中で使われたスライドは、多くがすでに公開されているFITC Amsterdam 2010のPDFと共通するようです。 そこで、とくにFlashコンテンツのパフォーマンス向上に関わる部分を、筆者の興味にしたがって若干の加筆・補正も含みつつ抜出してみました。なお、ActionScript 3.0におけるパフォーマンス向上の基については「ActionScript 3.0におけるパフォーマンス向上のヒント」をご参照ください。 *ページ番号は、Mike Chambers氏のPDFによる。 レンダリング(p.31、34) ハードウェア合成のレンダリングはDisplayObjectに使われる ソフトウェアレンダリングは画面

    [AS3] パフォーマンス向上のヒント
  • 自動でリンケージを設定するFlashコマンド

    ライブラリ内の選択したアイテムに、自動でリンケージを設定するFlashコマンドを公開します。 概要 このコマンドを実行すると、ライブラリで選択中のアイテムに対して自動的にリンケージ設定が行われます。具体的には、アイテム名がそのままクラス名に設定され、「ActionScript用に書き出し」「1フレーム目に書き出し」にチェックが入った状態になります。 ビットマップのようにアイテム名の末尾に「.png」「.jpg」など拡張子らしきものがある場合は、それを無視したクラス名が付くようになっています。例えば「Title.png」に対してこのコマンドを実行すると、「Title」というクラス名が付けられます。 また、フォルダの中に入っているアイテムは、フォルダ名がパッケージ名に変換されます。例えば「buttonsフォルダ内のPhotoButton1.png」に対してこのコマンドを実行すると、「butto

    自動でリンケージを設定するFlashコマンド
  • ライブラリのアイテムをフォルダに振り分けるFlashコマンド

    ライブラリ内の選択したアイテムを、特定のルールに従ってフォルダに振り分けるFlashコマンドを公開します。 概要 このコマンドを実行すると、ライブラリで選択中のアイテム名に「_」(アンダースコア)が付いている場合、その前後で名前を区切り、前者をフォルダ名、後者をファイル名としてフォルダ分けされます。 例えば、「buttons_PhotoButton1.png」というビットマップに対してこのコマンドを実行すると、「buttons」フォルダが作成され、その中に「PhotoButton1.png」が振り分けられます。 個人的には、PSDExporterと連携させて使うなどしています。 気が向いたら、区切り文字の指定なども対応したいと思っています。 ダウンロード automatic-classify-library.mxp ダウンロード後、MXPファイルを実行してください(要Extension M

    ライブラリのアイテムをフォルダに振り分けるFlashコマンド
  • 複数のレイヤーをまとめてガイドにするFlashコマンド

    選択した複数のレイヤーをまとめてガイドにするFlashコマンドを公開します。 概要 選択中のレイヤーを通常/ガイドのトグルで変更するFlashコマンドです。普通のレイヤーに対して実行するとガイドレイヤーに、ガイドレイヤーに対して実行すると普通のレイヤーに変更します。 例によって、[編集]メニューのキーボードショートカットに割り当てて使うと便利です。私はCtrl+Shift+3にしています。 ダウンロード get_guide_layers.mxp ダウンロード後、MXPファイルを実行してください(要Extension Manager)。 動作環境 Windows 7、Flash Professional CS5で動作を確認しています。Mac OS X、Flash CS4 Professionalなどでは確認していませんが、おそらく動くと思います。 使用方法 [コマンド]メニューから、[まとめ

    複数のレイヤーをまとめてガイドにするFlashコマンド
  • [AS3] Observerパターンのサンプルプログラム

    オブジェクト指向プログラミングにおけるデザインパターンに、「Observerパターン」があります。対象オブジェクトの状態が変わるごとに、その情報を必要なインスタンス(Observer)に送る仕組みです。Javaの例をActionScript 3.0に書替えてみましょう。今回は、デザインパターンの解説書として定評のある結城浩著『Java言語で学ぶデザインパターン入門』のサンプルプログラムを題材とします[*1]。 Observerパターンは、出版−購読型モデルとも呼ばれます。メールマガジンに登録して、その配信を受けるのと似た仕組みです。したがって、配信する側(Generator)と受取る側(Observer)のふたつの役割が必要になります。ActionScript 3.0のクラス設計では、インターフェイスで仕様を定めます。 01 配信側クラスの仕様 ー インターフェイスINumberGener

    [AS3] Observerパターンのサンプルプログラム
  • [AS3] 連結リストとVectorによるエレメントの追加と削除

    投稿者:野中 文雄 | 投稿日:2010.10.12 | [AS 3][ActionScript][Tips][野中ゼミ] 「連結リスト」(linked list)はObjectとArrayクラスの中間のような仕組みで、エレメントには順序があるもののインデックス番号をもちません。その処理の速さを、Vectorクラスと比べてみます。 連結リストの各エレメントは、その前後のエレメントの参照をもちます。そのため、順序はあってもインデックス番号がないのです。連結リストの仕組みについて詳しくは、「連結リスト(linked list)」をお読みください。 ここでは、エレメントを最後に加える操作と先頭からエレメントを除く操作について、連結リストとVectorクラスを比べてみます。Vectorクラスのメソッドでは、push()とshift()です。テスト用のスクリプトをwonderflに掲げました。エレメ

    [AS3] 連結リストとVectorによるエレメントの追加と削除
  • [AS3] インスタンスをドラッグして回すクラス定義

    投稿者:野中 文雄 | 投稿日:2010.10.01 | [AS 3][ActionScript][サンプル][野中ゼミ] インスタンスをドラッグして回したり、マウスボタンを放して滑らせるアニメーション表現をクラス定義しました。[ライブラリ]のMovieClipシンボルに[クラス]として設定すれば、インスタンスのドラッグ&ドロップでそのようなインタラクティブな動きをします。 ドラッグ&ドロップするMovieClipシンボルを作成してタイムラインに置き、Flashムービー(FLA)ファイルを保存します(ファイル名は任意)。 ActionScript (AS)ファイルDragRotater.asをFLAファイルと同じ場所に保存します。 [ライブラリ]のシンボルを選んで[シンボルプロパティ]ダイアログボックスを開き([ライブラリ]パネルのオプションメニュー)、[クラス]に「DragRotater

    [AS3] インスタンスをドラッグして回すクラス定義
  • ActionScript 3.0による 三次元表現 in Apple Store, Ginza

    「3D空間で回す」というテーマで、つぎのようなお話をしました。 Flash Player 10から備わった3D表現の基礎を解説します。 第1に、ビジュアルエレメントを、3D空間でどのように座標変換(回転など)するかです。その際、変換の原点や順序、インスタンスの重ね順などに気をつけなければなりません。 第2は、3D座標値を直接扱う場合の考え方です。その結果を2D平面に(透視)投影するには、遠近法を適用します。また、テクスチャを貼りつけるときは、面の向きも考慮する必要があります。 つづくもうひとつのセッションでは、 池田泰延さんが「テクスチャで遊ぶ」というテーマで解説されました。

    ActionScript 3.0による 三次元表現 in Apple Store, Ginza
  • [AS3] ラジオボタンのように複数の中のひとつだけ設定値を変える

    投稿者:野中 文雄 | 投稿日:2010.08.03 | [AS 3][ActionScript][Tips][野中ゼミ] ラジオボタンは、ひとつを選ぶと他の選択は解除されます(図001)。このように、定められた値を複数の中のつねにひとつにだけ設定する手法について考えてみます。 図001■ラジオボタンはつねにひとつだけしか選択できない タイムラインには、テスト用に3つのMovieClipインスタンスmy0_mc〜my2_mcを置きます。そして、クリックしたインスタンスのみアルファを100%、ほかは50%としてみましょう(図002)。 図002■クリックしたインスタンスはアルファ100%で他は50%にする まず初期設定のスクリプトでは、3つのインスタンスは配列に入れて、forループでクリックに対するイベントリスナーを登録します。リスナー関数はひとつを共用します。オーソドックスなフレームアクシ

    [AS3] ラジオボタンのように複数の中のひとつだけ設定値を変える
  • [AS3] 変数には初期値を与える

    投稿者:野中 文雄 | 投稿日:2010.07.31 | [AS 3][ActionScript][Tips][野中ゼミ] ActionScript 2.0から、変数および関数の引数や戻り値にはデータ型が指定できます。とくに、ActionScript 3.0では、データ型を定めることにより、動作が最適化されます。したがって、変数宣言には必ずデータ型を添えるべきでしょう。加えて、変数には初期値も与えておくのが安心です。 変数に初期値を与えないためにハマる例としては、文字列つまりString型が挙げられます。つぎのスクリプト001は、TextFieldインスタンスをつくり、TextField.textプロパティにString型の変数値を代入します。 スクリプト001■TextField.textプロパティに初期値のないString型変数値を代入 var my_txt:TextField = n

    [AS3] 変数には初期値を与える
  • [AS3/CS5] Flash CS5の新機能とPlayerのバージョン

    投稿者:野中 文雄 | 投稿日:2010.05.24 | [AS 3][ActionScript][Tips][野中ゼミ] テキストエンジンのTLFテキスト(テキストレイアウトフレームワーク: Text Layout Framework)は、Flash Professional CS5の新機能です。ところが、そのインスタンスを生成・制御するTLFTextFieldクラスについて[ヘルプ]で調べると、「ランタイムバージョン」が「Flash Player 10, AIR 1.5」とされています(図001)。 図001■ Flash Professional CS5の[ヘルプ]の[TLFTextField]クラスの説明冒頭 「Flash Player 10, AIR 1.5」というのは、Flash CS4 Professionalの対応バージョンです。もちろん、CS4の[ヘルプ]を見ても、fl.

    [AS3/CS5] Flash CS5の新機能とPlayerのバージョン
  • [AS3/CS5] コードヒントとimport宣言

    投稿者:野中 文雄 | 投稿日:2010.05.22 | [AS 3][ActionScript][Tips][野中ゼミ] Flash Professional CS5では、ActionScript 3.0でデータ型の指定をするとimport宣言が自動的に加えられるようになりました(図001)。クラスを定義する場合には、手間が省けて助かります。けれど、フレームアクションでは、ありがたみがわかりにくいかもしれません。 図001■データ型を指定するとimport宣言が加わる フレームアクションにはimportステートメントを書かなくても、多くの場合エラーにはなりません。「これは、Flashのタイムラインには、デフォルトで必要なクラスが自動的にimportされるためです」(「import指示子」[訳者注*1]参照 )。 もっとも、importされるのは、基的にパッケージ flashのクラスです

    [AS3/CS5] コードヒントとimport宣言
  • [AS3] DisplayObjectインスタンスの削除とガベージコレクション

    投稿者:野中 文雄 | 投稿日:2010.05.09 | [AS 3][ActionScript][Tips][野中ゼミ] MovieClipシンボルのフレームアクションで親のタイムラインからインスタンスを消すには、つぎのようにDisplayObjectContainer.removeChild()メソッドを呼出します[*1][*2]。ただし、このとき気をつけなければならないことがあります。 var parent_mc:MovieClip = MovieClip(parent); parent_mc.removeChild(this); 表示リストからの削除 このフレームアクションが、ループするフレームアニメーションの中のひとつのフレームに書かれていたとします。すると、つぎのようなランタイムエラー#1009が起こります。 TypeError: Error #1009: nullのオブジェク

    [AS3] DisplayObjectインスタンスの削除とガベージコレクション
  • [AS3] ループ処理におけるカウンタ変数の減算と加算 2

    投稿者:野中 文雄 | 投稿日:2010.05.01 | [AS 3][ActionScript][Tips][野中ゼミ] Adobeのサイトに公開された「Optimizing Performance for the Flash Platform」の「Miscellaneous optimizations」につぎのような項が示されています。最適化のためには、「whileループでは逆順を使うように」("Use reverse order for while loops")ということです。しかし、その効果は疑わしく思われます。 以前の記事「ループ処理におけるカウンタ変数の減算と加算」のテストでは、「有意な差は認められませんでした」。しかし、Internet Explorer 7またはFirefox 3/Flash Player 10/Windows Vistaの環境で、減算の方が2割ほど速いと

    [AS3] ループ処理におけるカウンタ変数の減算と加算 2
  • [AS3] Vectorクラスの地味な追加機能

    投稿者:野中 文雄 | 投稿日:2010.04.15 | [AS 3][ActionScript][Tips][野中ゼミ] Flash Professional CS5から、Vectorクラスのインスタンスを生成するときに、エレメントが納められるようになりました。新たなシンタックスは、つぎのとおりです。 new <ベース型>[エレメント0, エレメント1, …, エレメントN, ] クラス名であるVectorの記述がなく、呼出しの括弧()も書かないという奇妙なスタイルです。最後のエレメントの後のカンマ(,)は省けます。 たとえば、0から2までの整数をエレメントとするVectorインスタンスは、つぎのステートメントで生成できます。 var myVector:Vector.<int> = new <int>[0, 1, 2]; もっとも、Flash CS4 Professional以前であって

    [AS3] Vectorクラスの地味な追加機能
  • [AS3] ループ処理におけるカウンタ変数の減算と加算

    投稿者:野中 文雄 | 投稿日:2010.04.12 | [AS 3][ActionScript][Tips][野中ゼミ] ループ処理では、多くの場合カウンタ変数を使います。その値は、加算するより減算する方が速いと噂されています。 出所は、Adobeのサイトに公開された「Optimizing Performance for the Flash Platform」の「Miscellaneous optimizations」です。「whileループでは逆順を使うように」("Use reverse order for while loops")とあり、つぎのようなスクリプトが示されています。 var i:int = myArray.length; while (--i > -1) { } 割り算よりも掛け算の方が速いとはいわれます。けれども、足し算と引き算で差があるという話は聞いたことがありませ

    [AS3] ループ処理におけるカウンタ変数の減算と加算
  • F-site | [AS3] プリミティブ型データとメモリ

    前掲のAdobeのドキュメントを参考にして、getSize()関数によりプリミティブ型データが使うメモリのバイト数について調べてみます。 //【Number型】 var n:Number; trace(getSize(n), n);   // 出力: 8 NaN n = Math.pow(2, 28) - 1; trace(getSize(n), n);   // 出力: 4 268435455 n = Math.pow(2, 28); trace(getSize(n), n);   // 出力: 8 268435456 n = Number.MAX_VALUE; trace(getSize(n), n);   // 出力: 8 1.79769313486231e+308 n = 0.1; trace(getSize(n), n);   // 出力: 8 0.1 //【int型】 var

    F-site | [AS3] プリミティブ型データとメモリ
  • [AS3] Vectorクラス対Arrayクラスの処理速度比較

    投稿者:野中 文雄 | 投稿日:2010.04.07 | [AS 3][ActionScript][Tips][野中ゼミ] Adobeのサイトに公開された「Optimizing Performance for the Flash Platform」の「Vector class versus Array class」の項は、Flash Player 10から実装されたVectorクラスとArrayクラス(配列)との処理速度を比べています。 VectorとArrayクラスの使い方やその違いについては、Adobeデベロッパーセンター「ActionScript 3.0におけるパフォーマンス向上のヒント」の05「ArrayとVectorクラス」で解説しましたので、ご参照ください。稿では、前記のドキュメントに沿って、ふたつのクラスの処理速度を比べてみます。 まず、条件を揃えなければなりません。配列の

    [AS3] Vectorクラス対Arrayクラスの処理速度比較
  • F-site | [AS3] DisplayObjectインスタンスの種類と使用メモリ

    投稿者:野中 文雄 | 投稿日:2010.04.06 | [AS 3][ActionScript][Tips][野中ゼミ] Adobeのサイトに公開された「Flash Platformのパフォーマンスの最適化」の「表示オブジェクト」の項は、DisplayObjectクラスを継承するShapeとSprite、MovieClipのオブジェクトについて、使用メモリの点から違いを比べています(なお、akihiro kamijo「Flash コンテンツパフォーマンス最適化(メモリ編 1)」参照)。その内容を、簡単にまとめてみましょう。 一般に、継承を遡るほど、機能は少なくなるものの、使用メモリも減ります。DisplayObjectと基になるクラスの継承は、つぎのとおりです。 DisplayObjectContainer→InteractiveObject→DisplayObject→EventDi

    F-site | [AS3] DisplayObjectインスタンスの種類と使用メモリ
  • [AS3] Vector3Dの四元数表現

    投稿者:野中 文雄 | 投稿日:2010.04.02 | [AS 3][ActionScript][Tips][バグ][野中ゼミ] [ヘルプ]の[Vector3D]クラスで「Vector3D.wプロパティ」の項を読むと、つぎのようなくだりがあります。しかし、これは四元数についての説明ではなさそうです。 四元数表記では、3次元回転の計算の4番目のエレメントとして角度が使用されます。wプロパティを使用すると、Vector3Dオブジェクトの回転角度を定義できます。回転角度と座標(x, y, z)の組み合わせにより、表示オブジェクトの方向が決まります。 Matrix3D.decompose()またはMatrix3D.recompose()メソッドは、その引数として方向スタイルが指定できます。この引数に定数Orientation3D.AXIS_ANGLEを渡すと、Vector3Dインスタンスで受渡し

    [AS3] Vector3Dの四元数表現