我有一個AS3專案,它的所有資產都使用[Embed]元資料標簽嵌入,因為我希望產生的SWF是完全獨立的,以便在互聯網上移植。
問題:
該檔案的大小相當大,我希望在加載時顯示一個進度條,而不是在完全完成之前顯示一個空白螢屏。我已經可以用Adobe Animate (Flash Professional)來實作這個目標,方法是有一個時間線,其中有一個輕幀1和一個重幀2,它有一個MovieClip來嵌入大部分的資產。
我正試圖切換到 Adobe Flash Builder,它沒有 IDE 時間線,但我對如何做與 Flash IDE 相同的事情感到茫然。有誰知道如何完成這個任務?
uj5u.com熱心網友回復:
選項№1。我選的那個,因為它更容易理解:外部加載器。一個輕量級的SWF,唯一的目的是在加載重量級的主模塊時顯示一些預加載資訊,如%或進度。
選項№2。有一個特定的metatag可以讓你模仿第1幀預加載器的行為。請記住,ASC2.0編譯器(AIR SDK,我想)不支持這個選項,而只支持ASC1.0編譯器(Flex SDK)。Flash Builder是Flex Builder的后裔,所以我想這很好,但如果它對你不起作用,你首先應該檢查你的Flash Builder所包裝的編譯器版本。
因此,你的主類(即你在設定中設定為檔案類的那個)應該有一個metatag:
package
{
import flash.events.Event;
import flash.display.Sprite;
//span>為神奇的沖擊力做準備。
[Frame(factoryClass="Preloader") ]
public class Main extends Sprite
{
公共函式 Main()
{
//這很重要,因為在創建時
//實體并沒有連接到舞臺上。
if (stage) onStage(null)。
else addEventListener(flash.events.Event.ADDED_TO_STAGE, onStage) 。
}
private function onStage(e:Event) : void
{
removeEventListener(flash.events.Event.ADDED_TO_STAGE, onStage) 。
//這是你實際應用的入口點。
///從這一點開始,該類的其余部分正常進行。
然后,提到的預加載器類。它的名字應該與上面的metatag中提到的完全一致。
package
{
import flash.display.DisplayObject;
import flash.display.MovieClip;
import flash.events.Event。
import flash.events.IOErrorEvent。
import flash.events.ProgressEvent。
import flash.utils.getDefinitionByName。
//該類代表多框架的主時間線。
///因此它應該子類化基本的MovieClip.。
public class Preloader extends MovieClip
{
public function Preloader()
{
//訂閱所有必要的點來監控加載。
addEventListener(Event.ENTER_FRAME, onFrame) 。
loaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioError)。
loaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress) 。
}
private function ioError(e:IOErrorEvent):void.
{
//在這里處理加載錯誤。。
}
private function onProgress(e:ProgressEvent) :void
{
///在這里顯示加載進度。
//使用e.bytesLoaded和e.bytesTotal值。
//使用e.bytesLoaded和e.bytesTotal值來計算加載的百分比和整體加載進度。
}
private function onFrame(e:Event):void
{
//當加載完成后,主時間線,
//由Preloader類代表的時間軸移動到第二幀。
if (currentFrame == totalFrames)
{
stop()。
onComplete()。
}
}
//此方法結束了加載,。
//清理預加載器本身。
///并將Main類實體化。
private function onComplete():void
{
removeEventListener(Event.ENTER_FRAME, onFrame) 。
loaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, ioError)。
loaderInfo.removeEventListener(ProgressEvent.PROGRESS, onProgress) 。
// 所以,事情是這樣的。你并沒有匯入Main類。
//因為如果你匯入了它,那么它將被嵌入到中。
//Preloader,那么它必須在Preloader之前加載。
//可以被初始化,這有點違背了整個想法。
//因此,你并沒有匯入Main類,而是獲得了它。
//通過其他方式,比如 "getDefinitionByName "方法。
//再次,要提供完全合格的類名。。
var aMain: Class = getDefinitionByName("Main") as Class;
stage.addChild(new aMain as DisplayObject) 。
//洗掉這個實體,因為它不再需要做任何事情了。
parent.removeChild(this)。
}
uj5u.com熱心網友回復:
我發現了一個解決方案,它可以與ASC2 / AIR SDK一起作業。雖然他的例子預加載器擴展了Sprite,我相信你需要擴展MovieClip來使其作業,因為你需要一個第2幀。而且一旦它完成了自身的加載,你需要一個gotoAndStop(2)。其他資訊這里。伙計,當你所有的參考鏈接都通過web.archive.org時,這不是一個好兆頭!
。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/319512.html
標籤:
上一篇:誰有FlashDevelop創建AAB檔案的有效批處理檔案?
下一篇:FastAPI動態多路徑引數
