好的,我正在开发一个侧面滚动游戏,我的问题是如何正确绘制和更新屏幕。我在SurfaceView上绘图,我使用Path来制作轮廓,目前算法只绘制了这个:
我通过使用Path.offSet()然后使用canvas.drawPath()进行侧面滚动,稍后我使用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 :(得分:0)