2017-07-24 60 views
0

好吧,我正在開發sidescrolling遊戲,我的問題是如何正確繪製和更新屏幕。我正在繪製一個SurfaceView,並使用Path來製作輪廓,目前該算法只繪製了這一點:如何在Android中使用畫布正確地側滑屏幕?

而我通過使用Path.offSet()和canvas.drawPath()進行sidescrolling,稍後更新通過使用Path.addRect()的道路上最後的X位置(和多數民衆贊成我基本上我是如何繪製的一切:使用Path.addRect())

所以這裏是更新屏幕螺紋:

@Override 
public void run() { 
    int x = LibraryLoader.getTerrainSizeX(); 
    int y = LibraryLoader.getTerrainSizeY(); 

    int count = 0; 

    Paint paint = new Paint(); 
    paint.setStyle(Paint.Style.FILL); 

    Path path = new Path(); 
    makePath(path, x, y, 0, LibraryLoader.getTerrainThickness()); 
    Path path2 = new Path(); 
    makePath(path2, x, y, LibraryLoader.getTerrainThickness(), y); 
while (run) { 
     Canvas c = null; 
     try { 
      c = surfaceHolder.lockCanvas(null); 
      synchronized (surfaceHolder) { 
       fps = fps(); 
       drawMyData(c, path, path2, paint, fps); 
       LibraryLoader.updateOffSet(); 
       updatePaths(path, path2, x, y); 
       if ((count++) == (x/2) - 1) { 
        LibraryLoader.updateOffSetArray(); 
        count = 0; 
       } 
      } 

     } finally { 
      if (c != null) {surfaceHolder.unlockCanvasAndPost(c);} 
     } 
    } 

及其各自的方法:

public void updatePaths(Path path, Path path2, int x, int y) { 
    path.offset(-1f, 0); 
    path.addRect(x-3, topValue, x-2, bottomValue, Path.Direction.CW); 
    path2.offset(-1f, 0); 
    path2.addRect(x-3, topValue, x-2, y, Path.Direction.CW); 
} 

因此,在我的手機它完美的工作在60fps,問題是我在一個較低端的設備進行測試,並開始在40fps然後下降每一個更新,直到它低於10fps ...(並繼續下降)。我想我需要清理路徑的狀態,否則我甚至不應該使用Path類開始。所以我的問題是我應該如何以最佳性能更新屏幕? Obs:畫布不是硬件加速的。

+0

推薦觀看這些舊的Google IO視頻:https://youtu.be/U4Bk5rmIpic和https://youtu.be/7-62tRHLcHk –

+0

是的,謝謝你! (猜你快到了; D)......我知道這是一個非常基本的問題......我想我會準備我的零食去看這些...... – Ariel

回答

0

好人我發現我所做的一切都是錯的。答案很簡單:如果您的android應用程序每幀更新整個屏幕,請使用Opengl。畫布是爲我所見過的應用程序設計的,希望我沒有錯。例如,如果您想爲LOGO或按鈕製作自定義動畫,那麼我想,您可以使用畫布。如果有人在這篇文章中摔倒了,請觀看Morrison Chang提到的視頻,他們會幫助你走上正軌。乾杯。

相關問題