gpt4 book ai didi

android - 如何处理大量可绘制对象

转载 作者:太空宇宙 更新时间:2023-11-03 11:20:56 25 4
gpt4 key购买 nike

我正在开发一款游戏,我在其中使用了大量可绘制对象。 “drawable”目录拥有超过 10MB 的内存(大约 900 个 drawables)。在每个游戏关卡的开始,我只加载必要的可绘制对象数组,所以当我绘制它们时,我只引用某些可绘制对象。这将我的可绘制对象数量减少到大约 300 个,但在某些情况下甚至可以使用 900 个可绘制对象。即使当我阅读可绘制对象时,它们也会使用超过 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);

当我更新所有变量时也会调用该方法,因此我有机会添加/删除一些我需要使用的可绘制对象。

和这部分代码

if ( IsPixmapNeeded(m_Objects[iIndex]) )

阻止我加载现在位于 m_Pixmap 数组中的可绘制对象。

我的问题是,处理大量可绘制对象的正确方法是什么?我的问题不是我的代码的问题,我宁愿找到一些更好的方法来处理大量的可绘制对象。

最佳答案

您是否使用位图工厂在任何地方加载这些位图?

如果是,

确保考虑到 BitMap.recycle();

此外,还要确保每部手机都有足够的 VM 预算来为这些图像分配内存。

如果你不使用 bitmapfactory,那就是 kk。

关于android - 如何处理大量可绘制对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8423273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com