2011-09-12 57 views
0

我已經創建了一個模塊化的應用程序,其中父SWF根據需要加載其他一些SWF。爲了優化,我創建了一個standard RSL爲什麼我的標準RSL沒有被加載?

我編譯通用代碼到SWC,並重新編譯應用程序SWF引用此SWC,用我的build.xml ANT任務的以下(每個SWF在我的應用程序):

<static-link-runtime-shared-libraries>false</static-link-runtime-shared-libraries> 
<runtime-shared-library-path path-element="${lib.loc}/RSL.swc"> 
    <url rsl-url="RSL.swf"/> 
</runtime-shared-library-path> 

我已經從RSL.swc中提取了RSL.swf,並將其放在與我的應用程序swfs和容器html文件相同的目錄中的web服務器上。

現在,當我打開我的申請,我得到的消息:

VerifyError: Error #1014: Class mx.core:BitmapAsset could not be found. 

我可以看到這個類包含在RSL.swc/RSL.swf的類。

我用小提琴來觀察發生了什麼,我可以看到我的應用程序swf文件被加載,但沒有嘗試獲取RSL.swf。

設置了Application.swf文件以使用RSL之後,我期望它在初始化之前嘗試加載RSL.swf,但是這不會發生。誰能建議爲什麼

回答

0

http://livedocs.adobe.com/flex/3/html/help.html?content=rsl_02.html

「如果基類是Sprite或MovieClip不能使用在純ActionScript項目的RSL的RSL要求應用程序的基類,如應用程序或SimpleApplication,瞭解RSL加載。」

由於我的基類是Sprite,我有這個錯誤。

對我來說,這是更好地收集所有必需的類到我的應用程序SWF文件,使用以下步驟:

  1. 使用compc命令創建與我想在我的應用程序包括文件SWC swf文件
  2. 使用mxmlc和include-libraries指向要包含的SWC文件。使用鏈接報告生成鏈接文件報告(xml)
  3. 使用指向鏈接文件報告(xml)的load-externs編譯每個額外的子swf - 這將鏈接到Application.swf的文件排除在編譯爲的子SWF

爲了實現步驟1:

<!-- We define the global classes which will be compiled into the parent Application 
    swf, but excluded from the tool swfs. As pure actionscript projects with base 
    class of Sprite can't usually use RSLs, we are forcing these classes to be loaded 
    into the parent application, and excluded from the child applications, allowing an 
    "Rsl-like" optimisation --> 

<fileset id="rsl.inclusions" dir="${main.src.loc}"> 
    <include name="${main.src.loc}/path1/**/*.as"/> 
    <include name="${main.src.loc}/path2/**/*.as"/> 
    ... 
</fileset> 

<pathconvert property="rsl.classes" pathsep=" " refid="rsl.inclusions"> 
<chainedmapper> 
    <globmapper from="${main.src.loc}\*" to="*"/> 
     <mapper type="package" from="*.as" to="*"/> 
</chainedmapper> 
</pathconvert> 

<!-- Compile SWC --> 
<compc output="${lib.loc}/MySwc.swc" 
     include-classes="${rsl.classes}"> 
<static-link-runtime-shared-libraries>true</static-link-runtime-shared-libraries> 
<source-path path-element="${main.src.loc}"/> 
</compc> 

爲了實現步驟2:

<mxmlc file="${main.src.loc}/pathToApp/Application.as" 
    output="${bin.loc}/Application.swf" 
    debug="${debug}" 
    use-network="true" 
    link-report="WorkbenchLinkReport.xml" 
    fork="true"> 
    <compiler.source-path path-element="${main.src.loc}" /> 
<static-link-runtime-shared-libraries>true</static-link-runtime-shared-libraries> 
<include-libraries dir="${lib.loc}" append="true"> 
    <include name="MySwc.swc" /> 
</include-libraries> 
</mxmlc> 

爲了實現步驟3:

<mxmlc file="${main.src.loc}/pathToChildSwf1/Child1.as"  
     output="${bin.loc}/Child1.swf" 
     debug="${debug}" 
     load-externs="WorkbenchLinkReport.xml" 
     fork="true"> 
<compiler.source-path path-element="${main.src.loc}" /> 
<static-link-runtime-shared-libraries>true</static-link-runtime-shared-libraries> 
<compiler.headless-server>true</compiler.headless-server>   
</mxmlc> 

另一個方便的提示:使用fork =「true」可防止正在編譯許多swfs的Java VM耗盡內存。

希望這有幫助!

相關問題