把一张480*800 Bitmap(屏幕尺寸)绘制之后,帧数一下从60fps掉到不到40fps,请教该怎么办?
作为游戏的背景图片,这张大位图的绘制是必须的,可一旦绘制帧数就保不住
哪些游戏厂商的2D游戏是怎么处理这个问题的啊??所用技术:surfaceview框架 图片绘制:bitmap+canvas 

解决方案 »

  1.   

    真想吐槽android的API,难道在不优化的前提下,把一张屏幕大小的位图每秒绘制60+次就不能实现吗?
      

  2.   

    怎么会!!android那些游戏怎么做出来的?
      

  3.   

    使用硬件加速试试 : android:hardwareAccelerated="true"
      

  4.   

    打印看一下canvas.drawbitmap这个方法所消耗的时间,如果时间很短没有影响到
    帧数的变化,那么就是你bitmap的处理有问题。如果这个时间很长,我也不知道怎么
    解决了,用opengl应该会快点吧
      

  5.   


    全部的canvas.drawbitmap大概用掉40%~50%的时间。全部游戏逻辑占用大概10%~20%的时间。剩下的时间暂时没找出是哪里消耗的
      

  6.   


    嗯有些明白了,具体怎么操作,是不是得自己创建个屏幕大小的bitmap缓冲一下?
      

  7.   

    尽量在绘制bitmap时不要用缩放,保持画面原来的大小
      

  8.   

    在网上看到关于图形加速方面的一些东西,感觉有点用,贴出来你看看有帮助没。
    切换到硬件加速的2D图形能够有效改善性能但是依然要通过以下推荐的方式来设计应用程序以便有效的使用GPU 
    1. 减少应用程序中View对象的数量 系统绘制越多的View对象就会越慢。这种情况也适用于软件呈现管道。减少View对象的有效方法之一就是优化UI。 
    2. 避免过度绘图 在彼此的顶部不要绘制太多的层。因为删除View时要同时删除遮盖在该View对象之上所有其他的不透明的View对象。如果需要绘制几个图层要尽量在上面采用合成模式考虑把它们合并成一个层。一个好的规则是每帧的像素数不要大于屏幕上像素数的2.5倍以位图的透明点阵数来计算。 
    3. 不要在绘图方法中创建呈现对象 一个常见的错误时每次调用呈现方法时创建一个新的Paint对象或Path对象。这样就会强制频繁的运行垃圾回收并且会绕过硬件管道中的缓存和优化。 
    4. 不要经常的编辑形状 对于复杂的形状如路径和圆是使用纹理掩码来呈现的。每次创建或修改路径硬件通道都要创建一个新的掩码这样会消耗大量的资。这个应该是GOOGLE开发者网站上翻译过来的,http://developer.android.com/guide/topics/graphics/hardware-accel.html