簡體   English   中英

是否可以將現有SWF嵌入到Air for iOS應用程序中?

[英]Is it possible to embed an existing SWF into an Air for iOS app?

我的一位客戶擁有許多SWF,他想將其移植到iPad。 但是,他只有SWF,而沒有FLA。

我想知道這是否是在Air for iOS應用程序內運行SWF的方法。 我讀過您可以使用Loader進行導入,但是它們只會作為動畫運行,而忽略其中的所有代碼。

謝謝,歡迎您的幫助!

[更新]我已經閱讀了一些有關使用SWC的知識,但仍不確定它們是否將運行代碼。

2012年10月更新:

在Adobe AIR 3.5中,adl引入了一項稱為“多重SWF支持”的功能,該功能允許使用加載程序加載.ipa中傳遞的SWF(本地文件,而不是來自服務器的文件)以在其中包含代碼。 ADL編譯器AOT編譯.ipa中包含的SWF,從而允許它們在iOS下加載並運行。

在撰寫本文時,AIR 3.5目前處於beta版,可在Adobe Labs網站上找到:

請注意,此功能需要-swf-version = 18或更大的根SWF文件(不一定是正在加載的資產),並且AIR名稱空間在應用程序xml文件中以3.5結尾。

較舊的答案:

帶有代碼的外部SWF不起作用的原因是,Air的ADT編譯器將您的根SWF(並且僅根SWF)交叉編譯為可由iOS設備使用的Objective-C代碼。 [嵌入式] SWF和.ipa中包含的SWF(AIR 3.5之前的版本)都不會交叉編譯。

我針對嵌入式資產的此問題創建了解決方法:

[Embed(source="gameLevel.swf")]
  private var gameLevel:Class;

 ...

 addChild(new gameLevel());

在這種情況下,如果gameLevel.swf中包含代碼,則通常不會在iOS中運行,因為新的gameLevel()將創建一個Loader並解釋SWF字節碼。 但是,如果您首先通過名為SWFMerge的工具運行上述SWF,它將使用嵌入式SWF並將其合並到根SWF中。 結果是ADT會將您的嵌入式代碼編譯為Objective-C,它將在iOS上運行,並請注意:現在,新的gameLevel()會生成您資產的實例-而不是Loader。

SWFMerge工具在這里:

http://www.onetacoshort.com/temp/SWFMerge_alpha.swf

LMK(如果此解決方法適用於您)或遇到問題。 干杯!

傑夫

是的你可以,

Apple不允許您的應用程序使用Loader從Internet下載SWF,但是您可以將它們嵌入並包含在.ipa中。

為此,您可以使用embed標簽

[Embed("myswf.swf", mimeType="application/octet-stream")] private var mySwf:Class;

然后,您可以使用

swf = new mySwf();
swf.addEventListener(Event.COMPLETE, completeHandler);

並與該完整處理程序中的swf進行交互

我想補充一點,可以編譯無法加載的SWF

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM