0

AS3は初めてで、AIR用のカスタムビデオプレーヤービデオプロジェクトを行っています。ビデオの再生方法に関する簡単な例(StageVideo以外)を研究しているときに、Flashからウィンドウの動作に対する素晴らしい自動スケーリング(ストレッチツーフィット)が得られるという独特の状況に遭遇しました。

SWFディレクティブの幅と高さを、作成しているflash.media.Videoオブジェクトの幅と高さに等しく設定するときはいつでも。自動スケーリング、ストレッチしてフィット、サイズ変更可能な動作を実行します。そのようです:

// SWF directive placed before the class declaration of the main class
[SWF( width="1024", height="576", backgroundColor="000000", visible="true" )]

// somewhere in my initialization
myvid = new Video();
with( myvid )
{
    x = 0;
    y = 0;
    width = 1024; // if I set this wxh equal to wxh in the SWF directive it auto-scales!
    height = 576;
}
myvid.attachNetStream( myns );
addChild( myvid ); // must come after instancing of video and netstream, and attach to make the auto-scale work
myvid.play( "somevideo.flv" );

両方で幅を16に、高さを9に設定しても、ウィンドウのサイズにぴったりと収まります。この振る舞いを説明してもらえますか?私がドキュメントで読んだもののどれもこれについて言及していませんでした。

誤解しないでください、私はこの振る舞いが好きです!:)それは私にとって物事を簡単にしました。しかし、コードに関しては、設定したコードが自動スケーリングとは何の関係もないため、なぜこれが発生するのかを理解する必要があります。

また、ディレクティブは一体何のためのものですか?純粋なActionScript3に相当するものだけではありませんか?彼らは私にはハックっぽく見えます。

4

1 に答える 1

3

あなたが説明している動作scaleは、FlashのHTML埋め込みのパラメータが原因だと思います。通常、これはデフォルトでshowAll、コンテナに合うようにフラッシュをスケールアップします。

サイズには、コンテナのサイズ(HTMLページのブロック)とFlashコンテンツのサイズ(SWFタグで指定したもの)の2種類があります。スケールモードは、これらのサイズが一致しない場合の動作を決定します。この動作は、埋め込みパラメーターを微調整するか、AS3から直接stage.scaleMode:を使用して制御できます。

import flash.display.StageScaleMode;
// scale the content to fit the container, maintaing aspect ratio
stage.scaleMode = StageScaleMode.SHOW_ALL;
// disable scaling
stage.scaleMode = StageScaleMode.NO_SCALE;

スケールモードを有利に使用したい場合は、次のようにステージの寸法に一致するようにビデオの幅を設定します。

myvid.width = stage.stageWidth;
myvid.height = stage.stageHeight;

これにより、SWFの幅と高さを繰り返す必要がなくなります。

ディレクティブは主に、コンパイラーのメタデータまたは命令を指定します。特にSWFタグは、必要な幅、高さ、フレームレートなどのSWFヘッダーの情報を指定します。ほとんどの場合、これらは、ファイルの表示方法に関するプレーヤー+コンテナーへのいくつかの提案にすぎません。それらのいくつかはコード()で変更できますstage.frameRate = 50;。もう1つのメタタグはEmbed、です。これは、いくつかのアセットをSWFにバンドルします(特に、バイナリデータを埋め込みたい場合に便利です)。

于 2011-04-02T04:21:28.013 に答える