Macromedia Flash非公式テクニカルノート MovieClip._alphaの処理について
Platform: All アルファを設定したエレメントの描画は、Flashの中でも負荷の高い処理です。それは、画面のピクセルを描画するために、そのエレメントだけでなく背景のピクセル情報も必要になるからです。この点は、アニメーションの処理が、トゥイーンかスクリプトかを問いません。本稿ではスクリプトによるMovieClip._alphaプロパティの処理について、いくつか注意すべき点を述べます。 1. MovieClip._alphaは0でも負荷が発生 実際、16bitカラーのディスプレイでは、アルファを0に設定したエレメントの輪郭がうっすら見えてしまうという問題が発生します[*1]。これは、アルファが0であっても、エレメントの描画処理は行われていることを示します。 したがって、CPUの負荷を軽減するためには、アルファが0のまま放置されるインスタンスをなるべく減らした方がよいといえます。具体的には、代わりにMovieClip._visibleプロパティをfalseに設定するか、ステージ外に配置してしまう方法が考えられます[*2]。外部SWFをMovieClipインスタンスにロード(MovieClip.loadMovie()またはloadMovie())する場合は、読込み時にMovieClip._visibleプロパティは一旦trueにリセットされてしまうので、後者が有効でしょう。 さらに、そのMovieClipインスタンスが2度と表示する必要のないものであれば、MovieClip.removeMovieClip()メソッドでインスタンスを完全に削除してしまう方が、負荷はより軽減できます。 なお、アルファの設定されたインスタンスを多数重ねると、CPU負荷が高くなるだけでなく、正しく表示されないこともあります[*3]。表現の内容をよく検討して、同じフレームの中でアルファを同時に使用するエレメント数は最小限に抑えることが大切です。
2. MovieClip._alphaプロパティの内部処理は256諧調 図001■カラーミキサーのアルファは100%基準 しかし、[プロパティインスペクタ]でインスタンスの[カラースタイル]に[詳細]を選択したとき、[拡張効果]のオフセットはアルファも256諧調で設定することになっています。この値は、ColorクラスのColor.getTransform()やColor.setTransform()メソッドでも使用されます。 図002■拡張効果のオフセットは256諧調MovieClip._alphaプロパティの内部処理には、256諧調が用いられている様子です。たとえば、MovieClip._alphaプロパティに70%を代入して、実際に設定された値をプロパティから調べると、69.921875%という半端な値になっています。しかし、256諧調(1/256)を基準に換算すれば、179(179/256)という切りのいい数値であることがわかります(表001)。 表001■10%刻みで設定したMovieClip._alphaの実際の値と256諧調換算値
256諧調に換算した値に半端が出ると、その端数は切捨てられます。すなわち、つねに「整数値/256」の値に丸められます。ですからたとえば、1/256つまり0.390625%未満の少数値を加算しても、MovieClip._alphaプパティの値は変化しません。以下のスクリプトをMovieClipシンボルのフレームアクションに設定しても、MovieClip._alphaの値は0のまま変わりません。 スクリプト001■MovieClip._alphaに1/256未満の値を加えても変化しない
設定値をMovieClip._alphaプロパティに反映させるには、加算する値を1/256以上にするか、加算後の累計値を変数に保持してその値を設定する必要があります。つぎのスクリプト002は、プロパティに設定する累計値を変数に保持したうえで、その変数値をMovieClip._alphaプロパティに代入しています。 スクリプト002■加算した累計値を変数に保持したうえでMovieClip._alphaの値を設定
3. MovieClip._alphaプロパティの取り得る値 ただし、その値の範囲は-12800以上12800未満で管理されているようです。MovieClip._alphaプロパティに12800を代入すると、その値は-12800に変換されて設定されます。また、-12801を設定しようとすれば、プロパティ値は12799(厳密には12799.21875)に変わります。 以下のフレームアクションをMovieClipインスタンスに設定すると、12800以上や-12800未満の値が変換されることを[出力]パネルで確認でき、またMovieClipインスタンスの完全不透明と完全透明が反転して点滅するアニメーションになります。 スクリプト003■MovieClip._alphaに範囲外の値を設定
スクリプティングの実践としては、MovieClip._alphaプロパティに設定する値は、0から100までの範囲に限定することが安心だと考えられます。 関連項目 _____ 作成者: 野中文雄 Copyright © 2001-2006 Fumio Nonaka. All rights reserved. |
|||||||||||||||||||||||||||||||||||||||||||