Я занимаюсь разработкой игры, в которой я использую множество рисованных объектов. Каталог "Drawable" вмещает более 10 МБ памяти (около 900 объектов Drawable). В начале каждого игрового уровня я загружаю массив доступных только для рисования, поэтому, когда я рисую их, я ссылаюсь только на некоторые доступные для рисования. Это уменьшает количество моих предметов для рисования примерно до 300, но в некоторых случаях может быть использовано даже 900 предметов для рисования. Несмотря на то, что когда я перечитывал drawables, они используют более 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.
Мой вопрос, как правильно обрабатывать множество рисованных объектов? Моя проблема не в моем коде, я бы хотел найти лучший способ обработки большого количества объектов.