我正在開發一個遊戲,在那裏我使用了大量的drawables。 「可繪製」目錄擁有超過10MB的內存(約900個可繪製內存)。在每個遊戲級別的開始階段,我只能加載可繪製的數組,所以當我繪製它們時,我只能引用特定的可繪製對象。這將我的drawables數量減少到300個左右,但是有些情況下甚至可以使用900個drawables。儘管當我使用drawable時,他們使用了超過40 - 50MB的內存。我試圖在遊戲中加載它們,但這沒用,因爲遊戲速度慢得令人難以置信。如何處理大量的drawables
好的。我忘了添加一些代碼:P我的遊戲基於LunarLancher,因此代碼對您來說並不新鮮。
class GraphicView extends SurfaceView implements SurfaceHolder.Callback
{
class GraphicThread extends Thread
{
public GraphicThread(SurfaceHolder surfaceHolder, Context context, Handlerhandler)
{
...
LoadPixmap(context);
...
}
private void doDraw(Canvas canvas)
{
m_Pixmap[iIndex].setBounds(m_iX, m_iY, m_iX + WIDTH_I, m_iY + HEIGHT_I);
m_Pixmap[iIndex].draw(canvas);
}
}
private void LoadPixmap( Context context )
{
int iID = 0;
Resources res = context.getResources();
for(int iIndex=0; iIndex< m_Objects.size(); ++iIndex)
{
if (IsPixmapNeeded(m_Objects[iIndex]))
{
continue;
}
iID = res.getIdentifier("pixmap"+i, "drawable", "com.my.package");
if (iID != 0)
{
m_Pixmap[iIndex] = context.getResources().getDrawable(iID);
m_Pixmap[iIndex] = new ScaleDrawable(m_Pixmap[iIndex], 0, WIDTH_I, HEIGHT_I).getDrawable();
}
}
res = null;
context = null;
}
m_Pixmap[] = new Drawable[ FRAMES ];
}
此代碼只是我現在寫的一個樣本,但我的想法是一樣的。
這
LoadPixmap(context);
方法也被稱爲當我更新的所有變量,所以我有機會添加/刪除一些繪製,我將需要使用。
和代碼
if (IsPixmapNeeded(m_Objects[iIndex]))
這部分阻止我裝繪項目,自己目前在m_Pixmap陣列。
我的問題是,處理大量drawables的正確方法是什麼?我的問題不是我的代碼問題,我寧願找到一些更好的方法來處理大量的drawable。
因此,澄清。在每個級別開始時,您生成並存儲數組中的900個可繪製對象。然後你有一些邏輯確定該數組中需要繪製的可繪製對象,然後將它們繪製到屏幕上?您是否正在使用每幾毫秒重新繪製屏幕的循環?它是否只在執行某個動作時重新繪製? '你能提供代碼片段嗎? – Grambot