2012-02-29 50 views
0

我的一個客戶有很多SWF,他想將它們移植到iPad。但是,他只有SWF,而不是FLA。是否可以將現有的SWF嵌入Air for iOS應用程序?

我想知道它是否是在Air for iOS應用程序中運行SWF的方式。我讀過你可以用一個Loader導入,但它們只會以忽略它們內部所有代碼的動畫運行。

謝謝,任何幫助,歡迎!

[更新]我讀了一些關於使用SWC的內容,但仍不確定他們是否會運行代碼。

+0

這是正確的,在swf文件中不允許ActionScript,因爲Apple不允許第三方運行時在iOS中執行加載的代碼。 swf文件只包含時間軸動畫,並且沒有代碼,可以加載並運行,但這是一個相當小的用例。 – 2012-02-29 22:50:38

+0

您確實可以使用swc文件,但不會使用加載程序加載它們。您可以將它們作爲庫包含到主應用程序中。不幸的是,如果沒有fla,你可能無法用代碼生成swc。 – scriptocalypse 2012-02-29 23:18:14

+1

將swf文件打包爲swc文件可能是一個選項。 swc文件不在運行時加載,它們在編譯時包含在內。通常情況下,swc文件不是從現有的swf文件構建的,但它應該是可能的,因爲swc文件實際上是zip文件,其擴展名爲.swc並指定了內容http://en.wikipedia.org/wiki/Adobe_SWC_file – 2012-02-29 23:20:51

回答

2

更新,2012年10月進行交互:

在Adobe AIR 3.5中,adl引入了一項名爲「多SWF支持」的功能,允許使用Loaders加載.ipa(本地文件,而不是服務器)中提供的SWF以在其中包含代碼。 adl編譯器AOT編譯.ipa中包含的SWF,允許它們在iOS下加載和工作。

AIR 3.5目前正處於測試在寫這篇文章的時候,可在Adobe實驗室網站:

注意,這個功能需要-swf版本=應用程序xml文件中的根SWF(不一定是正在加載的資產)以及以3.5結尾的AIR命名空間的大小爲18或更大。

年長的答案:

原因外部主權財富基金與代碼不工作是由航空公司的ADT編譯交叉編譯你的根SWF(只有你的根SWF)轉換成Objective-C代碼耗材一個iOS設備。 [嵌入] SWF和包含在.ipa(AIR 3.5之前)中的SWF都不是交叉編譯的。

我創建了這個問題的變通方法爲嵌入式資產:

[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上工作,並且注意:new gameLevel()現在會生成資產實例 - 而不是Loader。

的SWFMerge工具是在這裏:

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

LMK如果這種解決方法對你的作品,或者如果你有麻煩了。乾杯!

-Jeff

+0

看起來不錯,會嘗試。非常感謝。 – 2012-09-04 18:23:37

1

當然可以,

蘋果不允許您的應用程序從互聯網上下載的SWF的使用裝載機,但你被允許嵌入,包括他們在您的.ipa內

要做到這一點,你會使用嵌入標籤

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

然後可以使用

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

有了這樣完整的處理程序中的SWF

我想補充一點,它是可以通過編譯的SWF不能加載

+0

但有一個問題:您只能以這種方式使用庫符號。 http://stackoverflow.com/questions/8915924/access-maintimeline-symbol-using-class-level-embed/8920101#8920101 – weltraumpirat 2012-02-29 23:56:46

相關問題