gpt4 book ai didi

android - SurfaceHolder.lockCanvas() 对我的游戏应用程序来说花费的时间太长

转载 作者:太空宇宙 更新时间:2023-11-03 12:42:04 26 4
gpt4 key购买 nike

我正在开发一款安卓游戏,我正在使用 SurfaceView。我有一个每 16 毫秒调用一次的方法(我想要 60fps)

public void myDraw(SurfaceHolder holder) {
Canvas c = null;
long start = System.currentMillis();
try {
synchronized(holder) {
c = holder.lockCanvas();
if (c != null) {
c.drawColor(Color.GREEN);
}
}
} finally {
if (c != null) {
holder.unlockCanvas(c);
}
}
Log.i(TAG, "total time:" + (System.currentMillis() - start));
}

当我运行我的应用程序时,LogCat 的输出是:

total time:30
total time:23
total time:6
total time:39
total time:17

为什么 Canvas 的锁定/解锁耗时太长?有没有更好的方法来解决我的问题? (也就是说,拥有一个 60 fps 的应用程序)

谢谢!

最佳答案

我在 Samsung Intercept 上遇到了类似的 FPS 问题,FPS 很低。我只有 12FPS,只有一个空白屏幕。我发现这个问题与 Android 在 Canvas 上进行自动缩放和绘制功能有关。在 AndroidManifest.xml 中,如果您添加以下行

那么 Android 将不会自动缩放 Canvas 和绘制函数。默认值为“false”,这将启用自动缩放。使用 android:anyDensity="true" 我能够获得 40+ FPS!所有这一切的不利之处在于,您现在必须自己进行所有数学运算才能匹配不同的屏幕尺寸。但这不应该那么难。希望这可以帮助任何有类似问题的人。我花了 5 个多小时才搞清楚这个小问题。

关于android - SurfaceHolder.lockCanvas() 对我的游戏应用程序来说花费的时间太长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6248399/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com