0

我在Starling中使用AssetManager類加載大量紋理,大約600-700 png文件。所有文件在啓動時不加載,我使用多個AssetManagers來保存圖像。開始時,它將大約70個圖像加載到3個不同的管理器,並且在加載時我會在iOS上收到一些內存警告。Starling AS3:很多紋理,內存警告iOS

  • iPhone APPNAME [644]:接收到的存儲器的警告。
  • iPhone appName [644]:應用程序收到來自系統的內存警告。
  • iPhone SpringBoard [74]:收到內存警告。
  • iPhone手機[199]:收到內存警告。

我試圖在同一時間加載它們,並試圖在另一完成時開始每個負載。我也試過System.gc();和System.pauseForGCIfCollectionImminent(0.1);在每個負載之間,這固定了iPhone 5(7.0.4)上的問題,但不是iPhone 3gs(6.1.3)上的問題。

八哥版本:1.4.1

任何人有關於如何解決這個任何提示?

回答

2

通常從移動發展的立足點從來就沒有「一刀切」的解決方案。有許多不同的屏幕尺寸和硬件配置。爲了解決這個問題,許多開發者會產生 - 如前所述,Sprite表。使用這種方法,應用程序只需要加載一個圖像,在你的情況下,數百個。圖像加載器需要很長時間才能連接到內存地址,以啓動紋理上傳到GPU - 我甚至無法想象,對於許多資產來說,它的速度必須很慢。

texture packer是驚人的,也有許多開發人員合併的另一個功能的助手。資產密度。在iPhone 3Gs中,開發人員將加載一組爲小屏幕尺寸開發的精靈表,而具有兩倍大小資產的較大精靈表則將加載平板電腦或某些高端設備。這種方法不僅能解決你的內存問題,還能讓你的應用在更廣泛的設備上看起來更好。

以下是關於multi-resolution development上的Starling Wiki的鏈接。

在「爲了更好」而對項目所做的所有更改中,上面提到的更改都是非常高的。

+0

是的,謝謝你的幫助!我已經創建了精靈表,而且效果更好。我也重建了聲音的加載。從一開始我就同時裝載了所有的聲音。但在需要之前加載它們會節省大量的內存。 – Erik

2

您不應該加載600-700張圖片。即使它們加載成功,您在性能上也會遇到很多問題。相反,使用atlas/sprite表。

http://wiki.starling-framework.org/manual/textures_and_images

而對於更優化的工作,使用ATF紋理代替PNG文件。

http://wiki.starling-framework.org/manual/atf_textures

+0

是的,我已經想通了這一點,但現在我只用兩個AssetMangagers,31個PNG圖像測試,所有的圖像具有2的冪內存警告仍在iPhone 3GS(6.1.3)上顯示。 – Erik

+0

@Erik好吧,手機,尤其是舊手機的內存容量有限,可能會超出它。我建議你嘗試ATF紋理,看看它如何去... – GeorgeCross

0

如果您針對您的應用運行XCode Instruments,則會看到設備的總負載,這是確定您多久收到一次內存警告的真實指標。

如果您的總負載百分比高於80%,預計存在大量不斷的內存警告。 GC會嘗試運行,每次都會導致幀速率的嚴重削波。

有一個關於這個和Adobe正在處理它的錯誤,但主要的解決方案是簡單地使用較少的內存。低檔次的紋理使其具有更低分辨率的設備,等等。

https://bugbase.adobe.com/index.cfm?event=bug&id=3649713