首页 > 解决方案 > Android:如何提高 SurfaceView 上绘制亮度动画的性能?

问题描述

我在 SurfaceView 中绘制了 36 个游戏单元,然后涉及每个单元上的亮度动画,FPS 显着下降。

当我只绘制单元格时,FPS 是完美的(帧更新约为 16-17 毫秒):

Bitmap cellBitmap = mResources.cellBitmap();
canvas.drawBitmap(cellBitmap, null, cellRect, null);

但是当我添加亮度效果时,FPS 大约是 50 毫秒:

ColorMatrix cm = new ColorMatrix(new float[]
{
        1, 0, 0, 0, brightness,
        0, 1, 0, 0, brightness,
        0, 0, 1, 0, brightness,
        0, 0, 0, 1, 0
});

Bitmap cellBitmap = mResources.cellBitmap();

Paint paint = new Paint();
paint.setColorFilter(new ColorMatrixColorFilter(cm));
canvas.drawBitmap(cellBitmap, null, cellRect, paint);

我意识到在每次绘制操作上应用颜色过滤器是一项额外的工作,但我无法避免这种情况并使用以前准备好的图像,因为由于动画的原因,我必须每帧更改亮度值。

有什么办法可以优化吗?我知道很多手机游戏的图形效果越来越困难,并且使用完美的 FPS 并相信我做错了什么

标签: javaandroidgraphics

解决方案


推荐阅读