我正在开发一款游戏,我使用了很多可绘制的游戏。 “可绘制”目录保存超过10MB内存(约900个可绘制内容)。在每个游戏关卡的开始时,我只加载了必需的drawables数组,所以当我绘制它们时,我只提到某些drawables。这将我的drawable数量减少到大约300,但在某些情况下,当时甚至可以使用900个drawable。即使我在使用可绘制的内容时,也会使用超过40 - 50MB的内存。我试图在比赛期间加载它们,但这没用,因为游戏速度令人难以置信。
确定。我忘记添加一些代码: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);
当我更新所有变量时也会调用方法,所以我有机会添加/删除一些我需要使用的drawable。
和这部分代码
if ( IsPixmapNeeded(m_Objects[iIndex]) )
阻止我加载m_Pixmap数组中的drawables。
我的问题是,处理大量抽奖的正确方法是什么?我的问题不是我的代码问题,我宁愿找到一些更好的方法来处理大量的drawables。
答案 0 :(得分:0)
您是否正在使用位图工厂将这些位图加载到任何位置?
如果是的话,
确保考虑到BitMap.recycle();
此外,请确保每部手机都有足够的VM预算来为这些图像分配内存。
如果你没有使用bitmapfactory,那就是kk。