好吧,我正在開發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