2017-07-24 38 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提到的视频,他们会帮助你走上正轨。干杯。

相关问题