Stage プロパティの設定

Flash Player 9 以降、Adobe AIR 1.0 以降

Stage クラスは、DisplayObject クラスのほとんどのプロパティとメソッドをオーバーライドします。 オーバーライドされたプロパティまたはメソッドのいずれかを呼び出した場合、Flash Player および AIR は例外をスローします。例えば、Stage オブジェクトは、アプリケーションのメインコンテナとして位置が固定されているため、x プロパティや y プロパティを持ちません。x プロパティと y プロパティは、コンテナを基準として表示オブジェクトの位置を参照します。Stage オブジェクトは別の表示オジェクトコンテナに含まれていないので、この 2 つのプロパティは適用されません。

注意: Stage クラスの一部のプロパティおよびメソッドは、最初にロードされた SWF ファイルと同じセキュリティサンドボックス内にあるオブジェクトを表示するためにのみ使用できます。詳しくは、ステージのセキュリティを参照してください。

再生フレームレートの制御

Stage クラスの frameRate プロパティは、アプリケーションにロードされたすべての SWF ファイルのフレームレートを設定するために使用します。詳しくは、『Adobe Flash Platform 用 ActionScript 3.0 リファレンスガイド』を参照してください。

ステージの拡大/縮小の制御

Flash Player または AIR を表す画面の部分のサイズが変更されると、ランタイムは自動的にステージのコンテンツを調整して補正します。ステージのコンテンツを調整する方法は、Stage クラスの scaleMode プロパティで指定します。このプロパティには、flash.display.StageScaleMode クラスの定数として定義されている次の 4 つの異なる値を設定できます。

  • StageScaleMode.EXACT_FIT:元のコンテンツの縦横比を無視して、新しいステージサイズに合わせて SWF を拡大/縮小します。拡大/縮小率が幅と高さで異なる場合にステージの縦横比が変更されると、コンテンツが伸びたり縮んだりして見えるおそれがあります。

  • StageScaleMode.SHOW_ALL:コンテンツの縦横比を変更せずに、新しいステージサイズ内に全体が収まるように SWF を拡大/縮小します。この拡大/縮小モードではコンテンツの全体が表示されますが、標準のテレビでワイドスクリーンのムービーを見る際に現れる黒い帯のような、「レターボックス」の枠線が表示されることがあります。

  • StageScaleMode.NO_BORDER:コンテンツの縦横比を変更せずに、新しいステージサイズ全体を満たすように SWF を拡大/縮小します。この拡大/縮小モードではステージ表示領域全体が利用されますが、トリミングが発生する場合があります。

  • StageScaleMode.NO_SCALE:SWF を拡大/縮小しません。新しいステージサイズの方が小さい場合は、コンテンツのトリミングが発生します。新しいステージサイズの方が大きい場合は、余分な領域は空白となります。

    StageScaleMode.NO_SCALE 拡大/縮小モードでのみ、Stage クラスの stageWidth プロパティと stageHeight プロパティを使用して、サイズ変更後のステージの実際のピクセルサイズを指定できます。(他の拡大/縮小モードでは、stageWidth および stageHeight プロパティは常に SWF の元の幅と高さを反映します)。さらに、scaleModeStageScaleMode.NO_SCALE に設定した場合、SWF ファイルがサイズ変更されると Stage クラスの resize イベントが送出されるので、それに合わせて調整することができます。

    結果として、scaleModeStageScaleMode.NO_SCALE に設定することにより、必要な場合は、ウィンドウのサイズ変更に応じて画面の内容をより詳細に制御できます。例えば、ビデオとコントロールバーが含まれる SWF の場合、ステージがサイズ変更されたときに、コントロールバーのサイズを変えずに、ビデオウィンドウのサイズだけをステージサイズの変更に合わせて変更できます。 例を次のコードに示します。

    // mainContent is a display object containing the main content; 
    // it is positioned at the top-left corner of the Stage, and 
    // it should resize when the SWF resizes. 
     
    // controlBar is a display object (e.g. a Sprite) containing several 
    // buttons; it should stay positioned at the bottom-left corner of the 
    // Stage (below mainContent) and it should not resize when the SWF 
    // resizes. 
     
    import flash.display.Stage; 
    import flash.display.StageAlign; 
    import flash.display.StageScaleMode; 
    import flash.events.Event; 
     
    var swfStage:Stage = mainContent.stage; 
    swfStage.scaleMode = StageScaleMode.NO_SCALE; 
    swfStage.align = StageAlign.TOP_LEFT; 
    swfStage.addEventListener(Event.RESIZE, resizeDisplay); 
     
    function resizeDisplay(event:Event):void 
    { 
        var swfWidth:int = swfStage.stageWidth; 
        var swfHeight:int = swfStage.stageHeight; 
     
        // Resize the main content area 
        var newContentHeight:Number = swfHeight - controlBar.height; 
        mainContent.height = newContentHeight; 
        mainContent.scaleX = mainContent.scaleY; 
         
        // Reposition the control bar. 
        controlBar.y = newContentHeight; 
    }

AIR ウィンドウに対するステージの拡大/縮小モードの設定

ステージの scaleMode プロパティは、ウィンドウのサイズを変更した場合に、ステージで子表示オブジェクトを拡大/縮小したり切り取ったりする方法を決定します。AIR では、noScale モードしか使用できません。このモードでは、ステージは拡大/縮小されません。その代わり、ステージのサイズは、ウィンドウの境界を使用して直接変更します。ウィンドウのサイズを小さくした場合は、ウィンドウが切り取られることがあります。

ステージの拡大/縮小モードは、ステージのサイズや縦横比を常に制御できるとは限らない Web ブラウザーなどの環境用に設計されています。モードにより、ステージがアプリケーションの理想的なサイズまたは縦横比に一致しない場合の最良の妥協策を選択できます。AIR ではステージを常に制御できるので、コンテンツの再レイアウトやウィンドウサイズの調整を行うことにより、ほとんどの場合、ステージの拡大/縮小を有効にするよりも適切な結果が得られます。

ブラウザーと AIR の初期ウィンドウでは、ウィンドウサイズと最初の縮尺率の関係は、読み込んだ SWF ファイルから読み取られます。ただし、NativeWindow オブジェクトを作成する場合は、AIR によってウィンドウサイズと縮尺率(72:1)の任意の関係が選択されます。したがって、ウィンドウが 72 x 72 ピクセルの場合、ウィンドウに追加された 10 x 10 の矩形は正しいサイズ(10 x 10 ピクセル)で描画されます。ただし、ウィンドウが 144 x 144 ピクセルの場合は、10 x 10 ピクセルの矩形は 20 x 20 ピクセルに拡大されます。ウィンドウのステージに noScale 以外の scaleMode プロパティをどうしても使用する場合は、ウィンドウの表示オブジェクトの縮尺率を「72 ピクセル対ステージの現在の幅と高さ」に設定することによって補正できます。例えば、次のコードでは、client という名前の表示オブジェクトに必要な縮尺率を計算します。

if(newWindow.stage.scaleMode != StageScaleMode.NO_SCALE){ 
client.scaleX = 72/newWindow.stage.stageWidth; 
client.scaleY = 72/newWindow.stage.stageHeight; 
}
注意: Flex ウィンドウと HTML ウィンドウでは、ステージの scaleMode プロパティは自動的に noScale に設定されます。scaleMode を変更すると、これらのタイプのウィンドウで使用されている自動レイアウト機能の動作が妨げられます。

フルスクリーンモードの操作

フルスクリーンモードを使用すると、ムービーのステージをビューアのモニター全体に設定できます。境界線やメニューなどは表示されません。Stage クラスの displayState プロパティは、SWF のフルスクリーンモードのオンとオフを切り替えるために使用されます。displayState プロパティは、flash.display.StageDisplayState クラスの定数で定義されるいずれかの値に設定できます。フルスクリーンモードをオンにするには、displayState プロパティを StageDisplayState.FULL_SCREEN に設定します。

stage.displayState = StageDisplayState.FULL_SCREEN; 

フルスクリーンインタラクティブモード(Flash Player 11.3 の新機能)をオンにするには、displayState プロパティを StageDisplayState.FULL_SCREEN_INTERACTIVE に設定します。

stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE; 

フルスクリーンモードは、マウスがクリックされた場合(右クリックを含む)またはキーが押された場合の応答として、ActionScript によってのみ初期化することができます。アプリケーションのセキュリティサンドボックスで実行される AIR コンテンツでは、ユーザーの操作に応答してフルスクリーンモードに入る必要はありません。

フルスクリーンモードを終了するには、displayState プロパティを StageDisplayState.NORMAL に設定します。

stage.displayState = StageDisplayState.NORMAL; 

また、別のウィンドウにフォーカスを切り替えるか、Esc キー(すべてのプラットフォーム共通)、Ctrl+W キー(Windows)、Command+W キー(Mac OS)、Alt+F4 キー(Windows)のいずれかを使用してフルスクリーンモードを終了することもできます。

Flash Player のフルスクリーンモードの有効化

HTML ページに埋め込まれた SWF ファイルでフルスクリーンモードを有効にするには、Flash Player を埋め込む HTML コードに param タグを含め、次のように embed 属性で名前 allowFullScreen と値 true を指定する必要があります。

<object> 
    ... 
    <param name="allowFullScreen" value="true" /> 
    <embed ... allowFullScreen="true" /> 
</object>

Flash オーサリングツールで、ファイル/パブリッシュ設定を選択し、パブリッシュ設定ダイアログの「HTML」タブで、「Flash のみ - フルスクリーンサポート」テンプレートを選択します。

Flex で、HTML テンプレートにフルスクリーンをサポートする <object> タグおよび <embed> タグが含まれていることを確認します。

Web ページ内の JavaScript を使用して SWF 埋め込みタグを生成する場合、JavaScript を変更して、allowFullScreen param タグや属性を追加する必要があります。例えば、HTML ページで AC_FL_RunContent() 関数(Flash Professional および Flash Builder で生成された HTML ページで使用される)を使用する場合、allowFullScreen パラメーターを該当の関数呼び出しに対して次のように追加する必要があります。

AC_FL_RunContent( 
    ... 
    'allowFullScreen','true', 
    ... 
    ); //end AC code

これは、スタンドアローンの Flash Player で実行される SWF ファイルには適用されません。

注意: ウィンドウモード(HTML の wmode)を「不透明表示」(不透明)または「透明表示」(透明)に設定した場合、フルスクリーンウィンドウは常に不透明になります。

また、ブラウザー上の Flash Player におけるフルスクリーンモードの使用については、セキュリティに関連する制限があります。それらの制限についての説明は、セキュリティを参照してください。

Flash Player 11.3 以降のフルスクリーンインタラクティブモードの有効化

Flash Player 11.3 以降では、フルスクリーンインタラクティブモードがサポートされています。このモードでは、キーボードのすべてのキー(フルスクリーンインタラクティブモードを終了する Esc を除く)が完全にサポートされます。フルスクリーンインタラクティブモードは、複数のプレーヤーが参加するゲームでチャットを行う場合や、一人称シューティングゲームで WASD キーボードコントロールを使用する場合などに便利です。

HTML ページに埋め込まれた SWF ファイルでフルスクリーンインタラクティブモードを有効にするには、Flash Player を埋め込む HTML コードに param タグを含め、次のように embed 属性で名前 allowFullScreenInteractive と値 true を指定する必要があります。

<object> 
    ... 
    <param name="allowFullScreenInteractive" value="true" /> 
    <embed ... allowFullScreenInteractive="true" /> 
</object>

Flash オーサリングツールで、ファイル/パブリッシュ設定を選択し、パブリッシュ設定ダイアログの「HTML」タブで、「Flash のみ - フルスクリーンサポート」テンプレートを選択します。

Flash Builder および Flex で、フルスクリーンインタラクティブサポートをサポートする <object> タグと <embed> タグが HTML テンプレートに含まれていることを確認します。

Web ページ内の JavaScript を使用して SWF 埋め込みタグを生成する場合、JavaScript を変更して、allowFullScreenInteractive param タグや属性を追加する必要があります。例えば、HTML ページで AC_FL_RunContent() 関数(Flash Professional および Flash Builder で生成された HTML ページで使用される)を使用する場合、allowFullScreenInteractive パラメーターを該当の関数呼び出しに対して次のように追加する必要があります。

AC_FL_RunContent( 
    ... 
    'allowFullScreenInteractive','true', 
    ... 
    ); //end AC code

これは、スタンドアローンの Flash Player で実行される SWF ファイルには適用されません。

フルスクリーンのステージサイズと拡大/縮小

Stage.fullScreenHeight プロパティと Stage.fullScreenWidth プロパティは、フルスクリーンの状態にすぐ移行する場合、フルスクリーンサイズで使用されるモニターの高さと幅を返します。これらの値を取得した後、フルスクリーンモードに移行する前にユーザーがブラウザーを別のモニター上に移動する機会があると、値が無効になる可能性があります。これらの値の取得処理と Stage.displayState プロパティを StageDisplayState.FULL_SCREEN に設定する処理を同じイベントハンドラー内で実行すれば、値は正しいものとなります。複数のモニターがあるユーザー環境では、SWF コンテンツは 1 台のモニターのみを使用してフルスクリーン表示されます。Flash Player および AIR では、SWF コンテンツのもっとも多くの部分が配置されているモニターを一定の基準によって判別し、そのモニターをフルスクリーンモードで使用します。fullScreenHeight および fullScreenWidth プロパティは、フルスクリーンモードで使用されるモニターのサイズのみを反映します。詳しくは、『Adobe Flash Platform 用 ActionScript 3.0 リファレンスガイド』の Stage.fullScreenHeight および Stage.fullScreenWidth を参照してください。

フルスクリーンモードでのステージの拡大/縮小操作は、通常モードの場合と同様です。拡大/縮小は、Stage クラスの scaleMode プロパティで制御します。scaleMode プロパティを StageScaleMode.NO_SCALE に設定した場合、Stage の stageWidth プロパティと stageHeight プロパティは、SWF が占める画面領域のサイズ(この場合は画面全体)に応じて変わります。ブラウザーで表示する場合は、これに対応する HTML パラメーターによって設定が制御されます。

Stage クラスの fullScreen イベントを使用すると、フルスクリーンモードのオンとオフを検出して応答することができます。例えばこの例のように、フルスクリーンモードに移行するとき、またはフルスクリーンモードを終了するときに、画面アイテムの再配置、追加、削除を行うことができます。

import flash.events.FullScreenEvent; 
 
function fullScreenRedraw(event:FullScreenEvent):void 
{ 
    if (event.fullScreen) 
    { 
        // Remove input text fields. 
        // Add a button that closes full-screen mode. 
    } 
    else 
    { 
        // Re-add input text fields. 
        // Remove the button that closes full-screen mode. 
    } 
} 
 
mySprite.stage.addEventListener(FullScreenEvent.FULL_SCREEN, fullScreenRedraw);

このコードが示すように、fullScreen イベントのイベントオブジェクトは、flash.events.FullScreenEvent クラスのインスタンスです。このクラスには、フルスクリーンモードが有効(true)であるか無効(false)であるかを示す fullScreen プロパティがあります。

フルスクリーンモードでのキーボードサポート

Flash Player をブラウザー上で実行しているとき、フルスクリーンモードでは、キーボードイベントやテキスト入力などすべてのキーボード関連 ActionScript が無効になります。ただし、例外として次のキーは有効です。

  • 非表示文字を表す一部のキー:矢印キー、スペースバー、Tab キー

  • フルスクリーンモードを終了するキーボードショートカット:Esc キー(Windows と Mac OS)、Ctrl+W キー(Windows)、Command+W キー(Mac OS)、Alt+F4 キー

これらの制約は、スタンドアローンの Flash Player または AIR ランタイムで実行されている SWF コンテンツには適用されません。 AIR では、キーボード入力を許可するインタラクティブフルスクリーンモードがサポートされています。

フルスクリーンモードでのマウスサポート

デフォルトでは、フルスクリーンモードにおいても、マウスイベントはフルスクリーンモード以外の場合と同様に機能します。しかし、必要な場合は、Stage.mouseLock プロパティを設定してフルスクリーンモードのマウスロックを有効にすることができます。マウスロックを使用すると、カーソルが無効化され、境界のないマウス動作が可能になります。

注意: マウスロックは、デスクトップアプリケーションのフルスクリーンモードにおいてのみ有効化することができます。アプリケーションがフルスクリーンモードでない場合や、モバイルデバイス上のアプリケーションでは、設定すると例外がスローされます。

次の場合に、マウスロックは自動的に無効化され、マウスカーソルが再度表示されます。

  • ユーザーが Esc キー(すべてのプラットフォーム)、Ctrl + W キー(Windows)、Command + W キー(Mac)または Alt + F4 キー(Windows)を使用して、フルスクリーンモードを終了した場合。

  • アプリケーションウィンドウがフォーカスを失った場合。

  • プライバシーダイアログボックスなどの設定 UI が表示された場合。

  • ファイルアップロードダイアログボックスなどのネイティブのダイアログボックスが表示された場合。

mouseMove イベントなど、マウスの動きに関連するイベントでは、イベントオブジェクトは MouseEvent クラスを使用して表現されます。マウスロックが無効になっているときマウスの位置を調べるには、MouseEvent.localX および MouseEvent.localY プロパティを使用します。マウスロックが有効になっているときマウスの位置を調べるには、MouseEvent.movementX および MouseEvent.movementY プロパティを使用します。movementX および movementY プロパティの値は、マウス位置の絶対座標ではなく、前回のイベントの時点からマウス位置がどれだけ変化したかを示しています。

フルスクリーンモードでのハードウェア拡大/縮小機能

Stage クラスの fullScreenSourceRect プロパティを使用すると、ステージの特定の領域をフルスクリーンモードに拡大するように Flash Player または AIR を設定できます。 Flash Player と AIR では、ユーザーのコンピューターに搭載されたグラフィックカードやビデオカードにハードウェアの拡大/縮小機能があれば、これを利用します。通常、表示の拡大/縮小はソフトウェアよりもハードウェアで実行する方が高速に処理できます。

ハードウェアの拡大/縮小機能を活用するには、ステージ全体またはステージの一部をフルスクリーンモードに設定します。 次の ActionScript 3.0 コードでは、ステージ全体をフルスクリーンモードに設定します。

import flash.geom.*;  
{ 
    stage.fullScreenSourceRect = new Rectangle(0,0,320,240); 
    stage.displayState = StageDisplayState.FULL_SCREEN; 
}

このプロパティを有効な矩形に設定し、displayState プロパティをフルスクリーンモードに設定すると、指定された領域が Flash Player および AIR により拡大/縮小されます。ActionScript 内の実際のステージサイズ(ピクセル単位)は変更されません。 標準の「フルスクリーンモードを終了するには、Esc キーを押します」というメッセージに対応するため、矩形のサイズに最小限度が適用されます。通常、この限度は約 260 × 30 ピクセルですが、プラットフォームおよび Flash Player のバージョンによって異なる場合があります。

fullScreenSourceRect プロパティを設定できるのは、Flash Player がフルスクリーンモードでない場合のみです。このプロパティを正しく使用するには、先にこのプロパティを設定し、次に displayStateプロパティをフルスクリーンモードに設定します。

拡大/縮小を有効にするには、次のように fullScreenSourceRect プロパティを矩形オブジェクトに設定します。

stage.fullScreenSourceRect = new Rectangle(0,0,320,240);

拡大/縮小を無効にするには、fullScreenSourceRect プロパティを null に設定します。

stage.fullScreenSourceRect = null;

Flash Player でハードウェアの拡大/縮小機能をすべて利用するには、Flash Player の設定ダイアログボックスで機能を有効にします。このダイアログボックスをロードするには、ブラウザー上の Flash Player コンテンツ内を右クリック(Windows)または Control キーを押しながらクリック(Mac OS)します。最初のタブである「表示」タブを選択し、「ハードウェアアクセラレーション」チェックボックスをクリックします。

直接ウィンドウモードおよび GPU 合成ウィンドウモード

Flash Player 10 では、直接および GPU 合成という 2 つのウィンドウモードが導入されました。これらのウィンドウモードは、Flash オーサリングツールのパブリッシュ設定で有効にすることができます。これらのモードは、AIR ではサポートされていません。これらのモードを利用するには、Flash Player に対してハードウェアアクセラレーションを有効にする必要があります。

直接モードでは、最も速く最も直接的なパスを使用して画面にグラフィックスを挿入します。この方法はビデオの再生に有利です。

GPU 合成では、ビデオカード上のグラフィックスプロセッシングユニットを使用して合成を加速します。ビデオ合成は、複数のイメージを階層化して単一のビデオイメージを作成するプロセスです。合成が GPU によって加速される場合、YUV 変換、カラー補正、回転または拡大/縮小、ブレンドのパフォーマンスが向上します。YUV 変換は、送信に使用されるコンポジットアナログシグナルから、ビデオカメラと画面で使用される RGB(赤、緑、青)カラーモデルへの色変換を表します。GPU を使用して合成を加速すると、CPU に対するメモリと計算の要求が低減します。標準定義ビデオの再生も円滑になります。

これらのウィンドウモードを実装する際には注意が必要です。GPU 合成を使用すると、メモリおよび CPU リソースのコストが高くなる場合があります。ブレンドモード、フィルター処理、クリッピング、マスキングなどの一部の操作を GPU で実行できない場合は、ソフトウェアで行われます。これらのモードを使用し、バナーに対してこれらのモードを有効にしない場合は、HTML ページあたり 1 つの SWF ファイルに制限することをお勧めします。Flash Test Movie 機能では、ハードウェアアクセラレーションは使用されませんが、「パブリッシュプレビュー」オプションから使用することができます。

最大の画面更新レートである 60 を超えるフレームレートを SWF ファイルで設定することは無意味です。50 ~ 55 のフレームレートを設定すると、ドロップされたフレームが考慮されます。フレームのドロップは、様々な理由で時々発生することがあります。

直接モードを使用するには、Microsoft DirectX 9 対応で 128 MB の VRAM を搭載したハードウェア(Windows)か、OpenGL for Macintosh または Mac OS X v10.2 以上(Mac OS)が必要です。Windows で GPU 合成を使用するには、Microsoft DirectX 9 および Pixel Shader 2.0 対応で 128 MB の VRAM を搭載したハードウェアが必要です。Mac OS および Linux で GPU 合成を使用するには、OpenGL 1.5 およびいくつかの OpenGL 拡張(フレームバッファーオブジェクト、マルチテクスチャ、シェーダーオブジェクト、シェーディング言語、フラグメントシェーダー)が必要です。

direct および gpu アクセラレーションモードは、Flash のパブリッシュ設定ダイアログボックスで、「Flash」タブのハードウェアアクセラレーションメニューを使用して SWF ごとにアクティブにすることができます。「なし」を選択した場合、ウィンドウモードは、「HTML」タブの「ウィンドウモード」設定での指定に応じて defaulttransparent または opaque に戻ります。