2013-03-14 70 views
1

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

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

除了当我尝试绘制pngs/bmps/jpgs,我自己导入的任何图像时,一切都进展顺利。我可以使用内置的Android画布drawShape方法(包括许多Alpha内容的涂料)绘制形状和动画,直到母牛回家并保持60fps以上,但只要我尝试添加自己的图像(比如60kb png从Photoshop中保存)我立即看到一个重大的性能问题。屏幕上png的大小越大,命中越大(这是有道理的)。

我有一个简单的问题,可以帮助我明白,如果我在这里做得不对:

如果使用画布绘制方法在屏幕上画一个红色矩形,应该我希望它是可能的改为导入并显示相同尺寸的红色矩形,而不会损失性能?我已经在这个问题上做了大量的研究,但仍然不清楚为什么Android(或Nexus 7)在我的图像上会有这么难的时间。

Canvas是问题吗?我需要移植到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); 
} 
+2

我为我的游戏使用了LibGdx。即使当我使用大型图像文件时,性能也不会受到影响.. – 2013-03-14 06:47:00

+0

您可以在画布上显示代码在何处绘制图像? – 2013-10-08 10:50:21

+0

你如何增加fps?请你可以分享一些代码 – Deepak 2014-08-26 04:50:14

回答

-1

帆布比GLSurfaceView速度较慢,但​​在Nexus 7应该在一分屏无汗在处理300位。

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

+0

嗨,欢迎来到Stack Overflow!一个可能的解决方案的链接总是受欢迎的,但请在链接上添加上下文,以便您的同行用户可以了解它是什么以及它为什么在那里。始终引用重要链接中最相关的部分。想象一下,页面被移动到另一台服务器,或直接链接改变 - 未来的用户将无法从答案中获益。看看[如何回答](http://stackoverflow.com/questions/how-to-answer)。 – Jesse 2013-03-24 17:58:48