Android SurfaceView 绘图及帧频处理方法修正
来源:互联网 发布:绿色傲剑数据 编辑:程序博客网 时间:2024/05/01 21:31
http://www.cnblogs.com/SkyD/archive/2010/11/08/1872235.html
此文是针对上一篇《Android SurfaceView 绘图覆盖刷新及脏矩形刷新方法》的修正。
帧频处理
今天我在审视上篇示例代码时猛然发现我犯了个低级错误,致使帧频达不到预期,这个错误在这里:
这里设置每次绘制之后固定休眠33毫秒,以此来限制每秒帧频在30帧。
但实际上这里忽视了绘图及其他运算所消耗的时间,也就是说除非其他所有操作的总耗时都不足1/3毫秒,否则我们就根本无法达到每秒30帧的期望。
修正方法是在每帧开始处理前获取系统当前时间值,然后在处理完毕后再获取一次当前时间值,然后用当前值减去旧值,就得到了处理所消耗的时间,然后用33毫秒减去得到的消耗时间,就是我们此帧接下来应当休眠的时间值了:
现在运行一下程序,就能看到跑得很流畅了。
我想可能从事过游戏开发的人都能一眼看出这个错误吧,我是没经验在这栽了一下>_<~
绘图处理
在绘图处理时,还有一点需要注意的就是:
锁定Canvas之后到解锁这段时间内,最好仅执行与绘图有关的操作,其他代码越少越好,就好像往常我们开发时打开数据库链接一样。
因为我们锁定后其他线程如果要使用的话就得等待了,所以尽快释放会节省其他线程的等待时间,要尽量把无关紧要的代码放在这个时间段以外执行。
针对此例而言,就是那个有关矩阵部分的操作可以调整到前面去执行,Paint对象也可以挪到前面去创建,而且不需要每次循环都创建一个Paint对象,创建一次就足矣:
经过调整之后,绿色高亮部分就只剩下绘图相关的代码了,减负了不少呵。
- Android SurfaceView 绘图及帧频处理方法修正
- Android SurfaceView 绘图及帧频处理方法修正
- Android SurfaceView 绘图覆盖刷新及脏矩形刷新方法
- Android SurfaceView 绘图覆盖刷新及脏矩形刷新方法
- Android SurfaceView 绘图覆盖刷新及脏矩形刷新方法
- Android SurfaceView 绘图覆盖刷新及脏矩形刷新方法
- Android SurfaceView 绘图覆盖刷新及脏矩形刷新方法
- Android SurfaceView 绘图覆盖刷新及脏矩形刷新方法
- Android SurfaceView 绘图覆盖刷新及脏矩形刷新方法
- Android SurfaceView 绘图覆盖刷新及脏矩形刷新方法
- Android SurfaceView 绘图覆盖刷新及矩形刷新方法
- Android SurfaceView 绘图覆盖刷新及脏矩形刷新方法
- Android SurfaceView绘图机制
- Android---绘图机制---SurfaceView
- Android SurfaceView 多线程绘图
- android 绘图之surfaceview
- Android SurfaceView onDraw()绘图问题
- Android SurfaceView双缓冲绘图
- 线程池
- 安装RPM包快速应急手册
- 在Android上远程调试JavaScript
- OTSU算法
- struts2 服务器端乱码过滤器
- Android SurfaceView 绘图及帧频处理方法修正
- [转]:linux epoll模型
- Android SurfaceView 绘图覆盖刷新及脏矩形刷新方法
- [译]新的web应用:播下web3.0的种子
- Webbrowser中模拟连接点击(非鼠标模拟)
- PThread编程
- 总算是把Struts2的乱码问题解决了!!!
- 简单工厂模式理解1
- 控件按钮的页面代码