【问题标题】:How to handle lots of drawables如何处理大量可绘制对象
【发布时间】:2011-12-07 22:07:30
【问题描述】:

我正在开发一个游戏,我在其中使用了很多可绘制对象。 “drawable”目录拥有超过 10MB 的内存(大约 900 个 drawable)。在每个游戏关卡开始时,我只加载必要的drawables 数组,所以当我绘制它们时,我只引用某些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 数组中的可绘制对象。

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

【问题讨论】:

  • 所以,为了澄清。在每个关卡开始时,您会在一个数组中生成并存储超过 900 个可绘制对象。然后,您有某种逻辑来确定需要绘制该数组中的哪些可绘制对象,然后将它们绘制到屏幕上?您是否正在使用每隔几毫秒重新绘制一次屏幕的循环?它是否仅在执行某些操作时重绘? Can you provide code snippets?

标签: android drawable


【解决方案1】:

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

如果是这样,

确保您考虑到 BitMap.recycle();

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-15
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多