1

我已经问了几次类似的问题,但仍然没有解决我的问题,所以我想我会以另一种方式来解决,看看是否有人可以帮助我。

我正在为 Android 编写游戏;这是我第一次尝试这么大/复杂的程序。该游戏是一个 2d 动作/益智游戏,我使用 Canvas 而不是 OpenGL ES 进行绘图。

一切都很顺利,除了我尝试绘制 pngs/bmps/jpgs 时,我自己导入的任何图像。我可以使用内置的 Android 画布 drawShape 方法(包括许多带有 Alpha 内容的 Paints)绘制形状和动画,直到奶牛回家,并保持超过 60fps,但只要我尝试添加自己的图像(例如,60kb png 从 Photoshop 中保存)我立即看到性能受到重大影响。屏幕上 png 的大小越大,点击量就越大(这是有道理的)。

我有一个简单的问题可以帮助我理解我是否在这里做错了什么:

如果您使用 Canvas 绘制方法在屏幕上绘制一个红色矩形,我是否应该期望可以导入并显示一个相同尺寸的红色矩形而不损失性能?我已经对这个问题进行了大量研究,但我仍然不清楚为什么 Android(或 Nexus 7)会对我的图像造成如此困难。

帆布是问题吗?我是否需要移植到 Libdgx 或 AndEngine(我认为这将是一个过程......)?

如果有帮助,这就是我加载资产的方式:

@Override
public Image newImage(String fileName, ImageFormat format) {
    Config config = null;
    if (format == ImageFormat.RGB565)
        config = Config.RGB_565;
    else if (format == ImageFormat.ARGB4444)
        config = Config.ARGB_4444;
    else
        config = Config.ARGB_8888;

    Options options = new Options();
    options.inPreferredConfig = config;     

    InputStream in = null;
    Bitmap bitmap = null;

    try {
        in = assets.open(fileName);
        bitmap = BitmapFactory.decodeStream(in, null, options);
        if (bitmap == null)
            throw new RuntimeException("Couldn't load bitmap from asset '"
                    + fileName + "'");
    } catch (IOException e) {
        throw new RuntimeException("Couldn't load bitmap from asset '"
                + fileName + "'");
    } finally {
        if (in != null) {
            try {
                in.close();
            } catch (IOException e) {
            }
        }
    }   

    if (bitmap.getConfig() == Config.RGB_565)
        format = ImageFormat.RGB565;
    else if (bitmap.getConfig() == Config.ARGB_4444)
        format = ImageFormat.ARGB4444;
    else
        format = ImageFormat.ARGB8888;

    return new AndroidImage(bitmap, format);
}
4

1 回答 1

-1

画布比 GLSurfaceView 慢,但在 Nexus 7 上应该在一个屏幕上处理 300 个位图而不会出汗。

在 onDraw 中搜索您的性能问题。观看实时游戏设计中的提示和技巧: http ://www.google.com/events/io/2010/sessions/writing-real-time-games-android.html

于 2013-03-24T17:39:23.197 回答