rac*_*min 3 android canvas surfaceholder
我正在开发一款安卓游戏,我正在使用SurfaceView.我有一个方法,每16ms调用一次(我希望有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));
}
Run Code Online (Sandbox Code Playgroud)
当我运行我的应用程序时,LogCat的输出是:
total time:30
total time:23
total time:6
total time:39
total time:17
Run Code Online (Sandbox Code Playgroud)
为什么锁定/解锁画布需要花费太多时间?有没有更好的方法解决我的问题?(也就是说,有一个60 fps的应用程序)
谢谢!
小智 6
我有一个类似的FPS问题,三星拦截的FPS很低.我只得到12FPS只有一个空白屏幕.我发现这个问题与Android在画布上自动缩放和绘制函数有关.在AndroidManifest.xmlif中添加该行
<supports-screens android:anyDensity ="true">
然后Android不会自动缩放画布和绘制功能.默认为" false",它将启用自动缩放.随着android:anyDensity="true"我能够获得40+ FPS!所有这一切的缺点是你现在必须自己做所有的数学计算,以匹配不同的屏幕尺寸.但那不应该那么难.希望这有助于任何有类似问题的人.我花了5个多小时才把这个小虫子搞得一团糟.
| 归档时间: |
|
| 查看次数: |
2704 次 |
| 最近记录: |