2012-09-04 36 views
0

我正在開發一個視網膜啓用cocos2d遊戲。我在我的項目中爲視網膜和非視網膜添加了大量圖像。遊戲在模擬器[視網膜和非視網膜]都能正常工作,而且在非視網膜設備中也可以完美運行。但是當我在視網膜啓用的設備上運行相同的意思,它會崩潰而不顯示任何消息。當我用樂器應用程序測試我的遊戲時,它會顯示低內存警告消息,如[http://screencast.com/t/sfRDTELrhomC]。當應用程序崩潰時在啓用Retina的設備中運行時,它不會在控制檯中顯示任何錯誤消息。我非常困惑目前的狀態,任何人都可以幫助我解決這個問題。應用程序崩潰在視網膜啓用低內存警告設備但在完美的非視網膜設備的作品

+0

您可以模擬模擬器中的內存警告,它位於硬件菜單下。確保啓用異常斷點,然後重試,您可能會看到崩潰發生的位置 – andreamazz

+0

您是否使用ImageNamed方法來顯示圖像? – freelancer

+0

@ SmartWork不,我沒有使用任何類似的方法 – Blisskarthik

回答

0

您可能正在使用大量內存來加載圖像,因此設備內存不足並且會導致應用程序死機。

我猜你正在使用PNG(因爲你沒有提供任何信息);當你從PNG,JPG等加載圖像時,圖像會被加載到內存中兩次,因爲它必須由cocos「翻譯」爲紋理。此外,此操作的紋理大小必須是2的冪,因此150x150的圖像會佔用256x256圖像的內存。這是很多浪費的內存。

我的第一個建議是購買Texture Packer(我根本沒有隸屬於它們,它只是一個偉大的軟件),它會把你的圖像製作成一個壓縮的PVR精靈表,其中包含幾個圖像一個紋理。

PVR文件直接加載到紋理中,因此它們不使用雙重內存,並且由於它們是精靈表,因此您的像素浪費較少。

我的第二個建議是,當加載你的圖像時,不要在runloop的同一個tick中做所有的事情; Cocos使用了很多autoreleases,並且直到tick結束才清除內存,所以不是一次一次地將所有圖像加載到內存中,而是調度該方法多次調用並每次加載一個新文件。

+0

PS。這不會在公園散步。這將需要一些工作。 – EmilioPelaez

相關問題