Я разрабатываю игру, в которой использую много рисунков. Каталог "drawable" содержит более 10 МБ памяти (около 900 drawables). В начале каждого игрового уровня я загружаю в массив рисунков только необходимые чертежи, поэтому, когда я их рисую, я обращаюсь только к определенным чертежам. Это уменьшает количество моих рисунков примерно до 300, но в некоторых случаях может использоваться даже 900 рисунков. Несмотря на то, что когда я читал чертежи, они использовали более 40–50 МБ памяти. Я пытался загрузить их во время игры, но это было бесполезно, потому что игра невероятно тормозит.
Ok. Я забыл добавить код :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.
Мой вопрос, как правильно обрабатывать множество рисунков? Моя проблема не в моем коде, я скорее хотел бы найти лучший способ обработки большого количества рисунков.
Can you provide code snippets
? - person Grambot   schedule 08.12.2011