Stage クラスについて
Flash の画質を設定する
サンプルをダウンロード
■Flash の画質を設定する
Flash の画質を変更するには stage のプロパティである quality を変更します。下の表にある定数か文字で指定すると画質を変更できます。
AIR の場合、画質は 画質高 と 画質最高 のみ選択できます。
| 定数 | 文字 | 効果 |
| StageQuality.LOW | "low" | 画質低 |
| StageQuality.MEDIUM | "medium" | 画質中 |
| StageQuality.HIGH | "high" | 画質高 |
| StageQuality.BEST | "best" | 画質最高 |
| なし | "autolow" | 画質低→高 |
| なし | "autohigh" | 画質高→低 |
画質を低に設定する
stage.quality = StageQuality.LOW;
stage.quality = "low";
画質を中に設定する
stage.quality = StageQuality.MEDIUM;
stage.quality = "medium";
画質を高に設定する
stage.quality = StageQuality.HIGH;
stage.quality = "high";
画質を最高に設定する
stage.quality = StageQuality.BEST;
stage.quality = "best";
■Flash の画質の違い(FlashPlayer8以降の場合)
画質低
・ベクターグラフィックにアンチエイリアスがかかりません。
・ビットマップグラフィックにスムージングがかかりません。
・ビットマップグラフィックにスムージングがかかりません。
画質中
・ベクターグラフィックに軽くアンチエイリアスがかかります。
・スムージングにチェックが入っているビットマップグラフィックは補正されます。
・スムージングにチェックが入っているビットマップグラフィックは補正されます。
画質高
・ベクターグラフィックに完全にアンチエイリアスがかかります。
・スムージングにチェックが入っているビットマップグラフィックは補正されます。
・スムージングにチェックが入っているビットマップグラフィックは補正されます。
画質最高
・ベクターグラフィックに完全にアンチエイリアスがかかります。
・スムージングにチェックが入っているビットマップグラフィックは補正されます。
さらに100%以下のサイズで表示されるときは別アルゴリズムで補正されます。
・スムージングにチェックが入っているビットマップグラフィックは補正されます。
さらに100%以下のサイズで表示されるときは別アルゴリズムで補正されます。
画質低→高
・はじめは画質低です。処理に余裕がある場合は自動的に画質高に切り替わります。
画質高→低
・はじめは画質高です。処理に余裕がない場合は自動的に画質低に切り替わります。
Flash のクライアントウィンドウの幅と高さを調べる
サンプルをダウンロード
■クライアント領域の幅と高さを取得する
Flash が表示されているクライアント領域の幅と高さを調べるには stage のプロパティである stageWidth と stageHeight から取得します。
クライアント領域の幅と高さを取得する
var w : int = stage.stageWidth;
var h : int = stage.stageHeight;
■クライアント領域が変更されたか調べる
ブラウザのウィンドウがドラッグされ、Flash の表示ウィンドウのサイズが変更されたか調べるには Event.RESIZE イベントを使います。
ただしこのイベントは、スケールモードが StageScaleMode.NO_SCALE のときのみ動作します。
リサイズされたときにクライアント領域の幅と高さを取得する
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.addEventListener(Event.RESIZE, function(event){
var w : int = stage.stageWidth;
var h : int = stage.stageHeight;
});
Flash のフレームレートを設定する
サンプルをダウンロード
■フレームレートを取得する
「パブリッシュ設定」で設定したフレームレートを取得するには、 stage のプロパティである frameRate から取得します。
フレームレートを取得する
var fps : Number = stage.frameRate;
■フレームレートを変更する
frameRate に数値を代入するとフレームレートを変更する事ができます。1〜1000まで設定できるようです。
フレームレートを変更する
stage.frameRate = 30;
Flash の整列する位置を設定する
サンプルをダウンロード
■整列する位置を設定する
Flash のスケールモードが 100% のときに、Flash が表示されているサイズが Flash のデフォルトのサイズより大きい場合にどこに吸着させるかを指定します。stage に alignというプロパティがあるので下の表にある定数を
代入するか、文字列を直に代入します。
| 定数 | プロパティ値 | 垂直方向 | 水平方向 |
| StageAlign.TOP_LEFT | "TL" | 上 | 左 |
| StageAlign.TOP | "T" | 上 | 中央 |
| StageAlign.TOP_RIGHT | "TR" | 上 | 右 |
| StageAlign.LEFT | "L" | 中央 | 左 |
| なし | " " | 中央 | 中央 |
| StageAlign.RIGHT | "R" | 中央 | 右 |
| StageAlign.BOTTOM_LEFT | "BL" | 下 | 左 |
| StageAlign.BOTTOM | "B" | 下 | 中央 |
| StageAlign.BOTTOM_RIGHT | "BR" | 下 | 右 |
左上に整列する
// 100%表示
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
stage.align = "TL";
右に整列する
// 100%表示
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.RIGHT;
stage.align = "R";
中央に整列する
// 100%表示
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = "";
Flash のスケールモードを設定する
サンプルをダウンロード
■スケールモードを設定する
Flash の表示の種類であるスケールモードを設定するには stage のプロパティである scaleModeを使用します。以下の表にあるような定数か文字を指定すると変更できます。
| 定数 | 文字 | 効果 |
| StageScaleMode.EXACT_FIT | "exactFit" | 縦横比を変えてフィット |
| StageScaleMode.NO_BORDER | "noBorder" | 縦横比を変えずにフィット |
| StageScaleMode.NO_SCALE | "noScale" | 100% 表示 |
| StageScaleMode.SHOW_ALL | "showAll" | すべて表示 |
縦横比を変えてフィットさせる
scaleMode = StageScaleMode.EXACT_FIT;
scaleMode = "exactFit";
縦横比を変えずにフィットさせる
scaleMode = StageScaleMode.NO_BORDER;
scaleMode = "noBorder";
100% 表示にする
scaleMode = StageScaleMode.NO_SCALE;
scaleMode = "noScale";
すべて表示にする
scaleMode = StageScaleMode.SHOW_ALL;
scaleMode = "showAll";
Flash をフルスクリーンモードにする
サンプルをダウンロード
■フルスクリーンモード
Flash をフルスクリーンにするには stage のプロパティである displayState に下の表にある定数か文字を指定します。
| 定数 | 文字 | 効果 |
| StageDisplayState.NORMAL | "normal" | 通常モードで起動する |
| StageDisplayState.FULL_SCREEN | "fullScreen" | フルスクリーンで起動する |
通常モードで起動する
stage.displayState = StageDisplayState.NORMAL;
stage.displayState = "normal";
フルスクリーンで起動する
stage.displayState = StageDisplayState.FULL_SCREEN;
stage.displayState = "fullScreen";
フルスクリーン表示の切り替えは、セキュリティの都合上ユーザーが意図せずに行われるべきではないという事で、必ずマウスイベント中か、キーボードイベント中に記述する必要があります。操作していないときにプロパティを変更しても何も起こりません。
マウスが押されたらフルスクリーン表示に変更する
stage.addEventListener(MouseEvent.MOUSE_DOWN,function(e){
stage.displayState = StageDisplayState.FULL_SCREEN;
});
ブラウザ用の Flash Player で動作させる場合は、HTMLタグの allowFullScreen という属性をすべてtrue に変更してください。この属性が false の場合、エラーメッセージが書かれたダイアログが発生します。
フルスクリーンを許可する(FlashCS3 のパブリッシュで書き出したタグの場合)
<script language="javascript">
if (AC_FL_RunContent == 0) {
alert("This page requires AC_RunActiveContent.js.");
} else {
AC_FL_RunContent(
(略)
'allowFullScreen', 'true',
(略)
); //end AC code
}
</script>
<noscript>
<object (略)>
(略)
<param name="allowFullScreen" value="true" />
(略)
<embed (略) allowFullScreen="true" (略) />
</object>
</noscript>
Adobe Flash 9 に付属しているスタンドアローンプレイヤーで動作させる場合は、最新の修正アップデートパッチを当てる必要があります。
ブラウザ用の Flash Player でフルスクリーン表示している間は、キーボード操作を使用することができません。テキストフィールドなどの機能も使用できません。
ハードウェアスケーリングを使用する
サンプルをダウンロード
■Flash のサイズが大きいと重い理由
Flash Player は、描画処理をすべて CPU だけで演算を行っています。(この記事を書いてるバージョン 9 時点の話です。)
画面の 1 ドットを描くコストを 1 としてみましょう。
[幅 400 高さ 300] の画面をすべて描くには、400 * 300 = 120000 ドットなので 120000 コストがかかります。
ではこの 2 倍の解像度である [幅 800 高さ 600] の画面をすべて描画したらどうなるでしょう。800 * 600 = 480000 ドットなので 480000 コストがかかります。
なんと解像度を 2 倍にすると 4 倍も処理負荷がかかります。
(注.他にもいろいろ複雑な計算を行うので単純に 4 倍という事はありません…)
最近のモニタサイズである [幅 1280 高さ 1024] だと 1280 * 1024 = 1310720 ドットなので 1310720 コストとなり約 11 倍相当の負荷となります。
これは、クロックが 2.0Ghzの CPU で快適に動かしているとしたらフルスクリーン表示にすると クロックが 200Mhz のヘボ CPU で動かしてるかのような遅さになります。
フルスクリーンのような巨大な画面サイズで Flash を表示する事はとても重い処理です。 そこで高速で表示できる方法を考えてみましょう。
1280 * 1024 の高解像度で描画処理を行うのではなく、 400 * 300 の低解像度の画面にいったんすべて描画してしまいビットマップ状態にします。その絵を、1回だけ拡大して 1280 * 1024 の高解像度サイズにしてみます。
→
これで低負荷で大きい画面を得る事が出来ますが、欠点もあります。それは、ドロー形式のものをラスタ形式に変換してから拡大表示するので、 ベクターグラフィックはすべてエッジが汚くなります。
この1回だけ拡大する処理の部分をビデオカード等の GPU に任せる事が出来ます。それが、ハードウェアスケーリングです。
画面の 1 ドットを描くコストを 1 としてみましょう。
[幅 400 高さ 300] の画面をすべて描くには、400 * 300 = 120000 ドットなので 120000 コストがかかります。
ではこの 2 倍の解像度である [幅 800 高さ 600] の画面をすべて描画したらどうなるでしょう。800 * 600 = 480000 ドットなので 480000 コストがかかります。
なんと解像度を 2 倍にすると 4 倍も処理負荷がかかります。
(注.他にもいろいろ複雑な計算を行うので単純に 4 倍という事はありません…)
最近のモニタサイズである [幅 1280 高さ 1024] だと 1280 * 1024 = 1310720 ドットなので 1310720 コストとなり約 11 倍相当の負荷となります。
これは、クロックが 2.0Ghzの CPU で快適に動かしているとしたらフルスクリーン表示にすると クロックが 200Mhz のヘボ CPU で動かしてるかのような遅さになります。
■高速で大きい画面サイズを得る方法を考えてみる
フルスクリーンのような巨大な画面サイズで Flash を表示する事はとても重い処理です。 そこで高速で表示できる方法を考えてみましょう。
1280 * 1024 の高解像度で描画処理を行うのではなく、 400 * 300 の低解像度の画面にいったんすべて描画してしまいビットマップ状態にします。その絵を、1回だけ拡大して 1280 * 1024 の高解像度サイズにしてみます。
→
これで低負荷で大きい画面を得る事が出来ますが、欠点もあります。それは、ドロー形式のものをラスタ形式に変換してから拡大表示するので、 ベクターグラフィックはすべてエッジが汚くなります。
■ハードウェアスケーリングとは?
この1回だけ拡大する処理の部分をビデオカード等の GPU に任せる事が出来ます。それが、ハードウェアスケーリングです。
もし、ユーザーがハードウェアアクセラレーションの設定を ON にしている場合は、 GPU で高速に処理されます。
OFF にしている場合は GPU が使われずに CPU だけで演算が行われます。しかしそれでも普通に表示するよりは早いです。
なおこの一連の処理は、自分で実装するわけではなくフルスクリーン表示時に自動的に行われます。
OFF にしている場合は GPU が使われずに CPU だけで演算が行われます。しかしそれでも普通に表示するよりは早いです。
なおこの一連の処理は、自分で実装するわけではなくフルスクリーン表示時に自動的に行われます。
■ハードウェアスケーリングを使用する
ハードウェアスケーリングを使用するには、stage.fullScreenSourceRect プロパティを使用します。このプロパティにRect型のオブジェクトを渡して拡大したい矩形範囲を指定します。
通常は、Flash のサイズを指定するといいでしょう。
このプロパティは、フルスクリーンではないときに設定する必要があります。
このプロパティは、フルスクリーンではないときに設定する必要があります。
(x:0,y:0,w:100,h:200)の矩形サイズをフルスクリーン時にハードウェアスケーリング表示を行う
stage.addEventListener(MouseEvent.MOUSE_DOWN,function(e){
stage.displayState = StageDisplayState.NORMAL;
stage.fullScreenSourceRect = new Rectangle(0, 0, 100, 200);
stage.displayState = StageDisplayState.FULL_SCREEN;
});
■ハードウェアスケーリングを使用しない
GPU を使用せずに CPU でフルスクリーン表示を行う場合は、stage.fullScreenSourceRect プロパティに null を指定します。
このプロパティは、フルスクリーンではないときに設定する必要があります。
このプロパティは、フルスクリーンではないときに設定する必要があります。
ハードウェアスケーリングを使用しない
stage.addEventListener(MouseEvent.MOUSE_DOWN,function(e){
stage.displayState = StageDisplayState.NORMAL;
stage.fullScreenSourceRect = null;
stage.displayState = StageDisplayState.FULL_SCREEN;
});

