2012-03-21 108 views
0

我創建了一個遊戲客戶端,它有一個階段 它將一個遊戲實例作爲一個子遊戲加載 遊戲實例創建一個新的movieclip tileset並將其添加到遊戲實例階段。 瓦片集有自己的舞臺,並加載爲兒童瓷磚(遊戲地圖),項目,菜單和英雄。 當我點擊某個項目時,它會在小塊中添加一個動畫片段作爲孩子,並在該動畫片段中加載一個外部swf,該swf會在裏面創建一個新小孩。displayobject depth

問題是,所有的孩子都在完美的時候用空氣調試器通過Flash測試它們,但是當我發佈它並安裝它時,它並沒有顯示出加載的外部swf的動態部分。

我想知道在舞臺上有多少個孩子或者我已經達到了深度限制的限制。

+0

我跟蹤了numChildren-1,它顯示我3個孩子,當它開始加載外部瑞士法郎(有2個孩子)。記住它顯示了一切,當我在調試器,但當我安裝它(作爲空氣應用程序)它省略了外部swf – fokion 2012-03-21 00:17:47

+0

也許當你安裝它的外部swf的位置是不同的,所以它不能再找到它來加載它?驗證它以確保您嘗試從正確的位置加載外部swf。 – 2012-03-21 00:28:47

+0

這不是一個位置問題,因爲不同的基本文件,如xml和其他swf是完全加載(即使安裝)。問題不是swf的加載,而是swf的動態內容作爲孩子的顯示 – fokion 2012-03-21 01:24:40

回答

0

你對DisplayObject的速度還沒有達到極限,它實際上是一種滑稽的一些顯示樹,我曾參與創建的深度與3深度相比:)。

問題是在這種情況下加載外部swf,你必須記住代碼實際上交叉編譯運行在特定的平臺上。這意味着(根據我的最佳猜測),轉換過程中可能已經考慮了字節順序,字節順序,字大小以及其他CPU和/或平臺特定屬性(更不用說向Dalvik下載/交叉編譯, android JVM,字節碼或A4/A5機器碼,不確定實際的指令集是在那裏調用的)。我決定深入研究這個問題,所以我導出了我的項目作爲一個APK,用7-zip打開了APK,發現了swf(並且看到了圍繞它的所有其他結構),提取了所述swf並將其放在旁邊在bin-debug文件夾中用於在AIR調試器中進行測試。使用7-zip打開了這兩個文件,並且從bin調試swf中有大量的DoABC文件,並且在同一個程序的apk版本中只有一個。進一步的檢查需要一個十六進制編輯器,因爲很多文件只有4個字節左右,所以用任何普通的文本編輯器閱讀它們都不能解決問題。如果你在調試模式下在設備上運行它,你可能會遇到某種錯誤。

無論如何,最好的選擇就是在運行時以「普通」格式加載資源,即mp3,png,不管它是什麼。你也可以將它們壓縮起來以節省空間並從這裏使用zip庫:​​

你應該能夠實現我能想到的所有事情,除了實際加載swf外,還可以使用外部加載的swf。

此外,爲了深入瞭解所有swf非意義上的所有事情,請查看swfdump.jar實用程序(谷歌它,有點心中吹我的4MB瑞士法郎成爲一個100 MB的XML文件與一切拼寫出來......有點,我用「第一個對象的XML編輯器」來仔細閱讀這樣的非意義的XML)我用那個jar寫一個maven插件,發現我們的源定義的類不會最終在產生的swf中,努力幫助清理孤立的代碼。

+0

這個答案使* no *感覺,除非OP使用空氣在Android上運行,所有。反編譯swf是一個核選項,可能在這裏不需要 – grapefrukt 2012-03-21 09:28:09

+0

@grapefrukt我並不是建議反編譯swf,我建議將AIR應用程序打包爲本地應用程序會導致除了簡單地將bin-debug文件夾中的相同swf打包到最終包中,還有其他轉換髮生,而且OP認爲他們已經達到了一些與精靈或顯示器y對象,這不是問題。此外,我最初只是猜測實際的目標平臺。另外,我假設,這是一個遊戲,移動作爲分配目標有意義。 – shaunhusain 2012-03-21 15:56:35