好吧,我正在开发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:画布不是硬件加速的。
推荐观看这些旧的Google IO视频:https://youtu.be/U4Bk5rmIpic和https://youtu.be/7-62tRHLcHk –
是的,谢谢你! (猜你快到了; D)......我知道这是一个非常基本的问题......我想我会准备我的零食去看这些...... – Ariel