博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SurfaceView
阅读量:5360 次
发布时间:2019-06-15

本文共 1735 字,大约阅读时间需要 5 分钟。

引用:

在用SurfaceView进行游戏开发过程中,用到SurfaceHolder来处理它的Canvas上画的效果和动画是必不可少的。用于控制表面,大小,像素等。

Abstract interface to someone holding a display surface. Allows you to control the surface size and format, 
edit the pixels in the surface, and monitor changes to the surface. This interface is typically available 
through the SurfaceView class. 
其中特别要注意以下的几个函数:
abstract void addCallback(SurfaceHolder.Callback callback);
// 给SurfaceView当前的持有者一个回调对象。
abstract Canvas lockCanvas();
// 锁定画布,一般在锁定后就可以通过其返回的画布对象Canvas,在其上面画图等操作了。
abstract Canvas lockCanvas(Rect dirty);
// 锁定画布的某个区域进行画图等..因为画完图后,会调用下面的unlockCanvasAndPost来改变显示内容。
// 相对部分内存要求比较高的游戏来说,可以不用重画dirty外的其它区域的像素,可以提高速度。
abstract void unlockCanvasAndPost(Canvas canvas);
// 结束锁定画图,并提交改变。

例子:

class DrawThread extends Thread {
private SurfaceHolder holder; private boolean running = true; protected DrawThread(SurfaceHolder holder) {this.holder = holder;} protected void doStop() { running = false; } public void run() {
Canvas c = null; while( running ) {
c = holder.lockCanvas(null); // 锁定整个画布,在内存要求比较高的情况下,建议参数不要为null try {
synchronized(holder) {
bGrid.drawGrid(c);//画游戏中的网格 BBoom.drawBooms(c, booms); //画游戏中的炸弹 bFairy.drawFairy(c);//画游戏中的主角 // 画的内容是z轴的,后画的会覆盖前面画的。 } } catch(Exception ex) {} finally {
holder.unlockCanvasAndPost(c); //更新屏幕显示内容 } } } };
 
 
 
 
 

转载于:https://www.cnblogs.com/sode/archive/2012/03/27/2419811.html

你可能感兴趣的文章
Linux常用命令(十)
查看>>
实验吧之这就是一个坑
查看>>
Linux常用命令(十二)
查看>>
Linux常用命令(十三)
查看>>
Linux常用命令(十五)
查看>>
Linux常用命令(十四)
查看>>
Linux常用命令(十七)
查看>>
Linux常用命令(十六)
查看>>
Linux常用命令(二十四)
查看>>
4种java定时器
查看>>
Vue.js 教程
查看>>
linux 设置网卡
查看>>
hive 语法 case when 语法
查看>>
Ajax:js读取txt内容(json格式内容)
查看>>
Task 7 买书最低价格问题
查看>>
Selenium3+python自动化007-警告框
查看>>
html5 相同形状的图形进行循环
查看>>
springboot中文官方文档
查看>>
ThreadLocal实现线程范围内共享
查看>>
多校HDU5723 最小生成树+dfs回溯
查看>>