2013-03-14 30 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