2011-04-02 23 views
0

我是AS3的新手,我正在爲AIR製作一些自定義視頻播放器視頻項目。在我研究如何播放視頻的簡單示例(非StageVideo)時,我遇到了一個獨特的情況,我從Flash獲得了令人敬畏的自動縮放(拉伸到適合)窗口行爲。有人可以向我解釋爲什麼此ActionScript代碼的行爲是自動縮放的嗎?

每當我設置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兩秤它和我的窗口的大小完全吻合。 有人可以解釋我這種行爲嗎?我在文件中沒有提到這件事。

不要誤解我的意思,我喜歡這種行爲! :)它讓我更容易。但在代碼方面,我需要理解爲什麼會發生這種情況,因爲我設置的代碼與自動縮放無關。

另外,什麼是指令?難道他們不只有純粹的ActionScript 3相當於?他們看起來對我來說很討厭。

回答

3

我認爲您所描述的行爲是由Flash的HTML嵌入中的scale參數引起的。一般默認爲showAll,縮放Flash以適應容器。

有兩種不同的尺寸:容器的大小(HTML頁面中的塊)和Flash內容的大小(您在SWF標籤中指定的大小)。縮放模式決定這些尺寸不匹配時的行爲。您可以通過調整該嵌入參數控制此行爲要麼,或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;)。另一個元標記是Embed,它將將一些資產捆綁到SWF中(如果要嵌入一些二進制數據,則特別方便)。

+0

謝謝你!非常簡潔明瞭。我還沒有達到了解階段的部分。這個給了我一個很好的理由。 – MrHuggies 2011-04-03 01:38:32

相關問題