[android游戏开发初学]SurfaceView初探之缓冲区测试
先上测试代码
private static class PathView extends SurfaceView implements SurfaceHolder.Callback{
private int vWidth;
private int vHeight;
private Paint pPaint;
private Path mPath;
private float endX;
private float endY;
private Random random;
DrawThread dt;
public PathView(Context context) {
super(context);
pPaint = new Paint();
pPaint.setAntiAlias(true);
pPaint.setColor(0xaf22aa22);
pPaint.setStyle(Paint.Style.STROKE);
mPath = new Path();
random = new Random();
getHolder().addCallback(this);
}
private void init(){
vWidth = getWidth();
vHeight = getHeight();
endX = 0.8f*vWidth;
endY = 0.8f*vHeight;
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
init();
dt = new DrawThread();
dt.runflag = true;
dt.start();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
init();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
dt.runflag = false;
dt = null;
}
public void doDraw(Canvas canvas){
clear(canvas);
canvas.drawPath(mPath, pPaint);
}
public boolean processing(){
//这里构建贝塞尔曲线
mPath.reset();
mPath.moveTo(50, 50);
mPath.quadTo(random.nextInt(vWidth), random.nextInt(vHeight), endX/2, random.nextInt(vHeight));
mPath.quadTo(random.nextInt(vWidth), random.nextInt(vHeight), endX, endY);
return true;
}
// 缓存debug的相关的参数
private int ind = 0;
private boolean DEBUG_BUFFER = true;
private void clear(Canvas canvas) {
int color = Color.BLACK;
if(DEBUG_BUFFER){
if(ind==0){
color = Color.RED;
}else if(ind==1){
color=Color.GREEN;
}else if(ind==2){
color = Color.BLACK;
}else if(ind==3){
color = Color.WHITE;
}else{
//ind>3 之后不清屏,查看绘制状态
return;
}
ind++;
}
canvas.drawColor(color);
}
//刷新线程
class DrawThread extends Thread{
private boolean runflag = false;
@Override
public void run() {
while (runflag) {
try {
loop();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
void loop() throws InterruptedException{
processing();
Canvas canvas = null;
try {
canvas = getHolder().lockCanvas();
if(canvas!=null){
doDraw(canvas);
}
}catch (Exception e) {
}finally{
if(canvas!=null){
getHolder().unlockCanvasAndPost(canvas);
}
}
Thread.sleep(500);
}
}
}
正常情况下,显示效果是不断的显示不同的贝塞尔曲线。但是如果没有做清屏操作的话,会不停的在原有的基础上进行绘制
private void clear(Canvas canvas) {
int color = Color.BLACK;
if(DEBUG_BUFFER){
if(ind==0){
color = Color.RED;
}else if(ind==1){
color=Color.GREEN;
}else if(ind==2){
color = Color.BLACK;
}else if(ind==3){
color = Color.WHITE;
}else{
//ind>3 之后不清屏,查看绘制状态
return;
}
ind++;
}
canvas.drawColor(color);
}
[android游戏开发初学]SurfaceView初探之缓冲区测试的更多相关文章
- [android游戏开发初学]简单的游戏框架
这两天,没事想学习游戏开发,看了一些资料之后准备开始.为了将来编码方便,先写了一个简单的游戏框架方便自己以后做练习用. 如果以后没有什么特殊的需求--比如opengl什么的,会尽量用这个简单框架来实现 ...
- [Android游戏开发]八款开源 Android 游戏引擎 (巨好的资源)
初学Android游戏开发的朋友,往往会显得有些无所适从,他们常常不知道该从何处入手,每当遇到自己无法解决的难题时,又往往会一边羡慕于 iPhone下有诸如Cocos2d-iphone之类的免费游戏引 ...
- Android游戏开发实践(1)之NDK与JNI开发03
Android游戏开发实践(1)之NDK与JNI开发03 前面已经分享了两篇有关Android平台NDK与JNI开发相关的内容.以下列举前面两篇的链接地址,感兴趣的可以再回顾下.那么,这篇继续这个小专 ...
- Android游戏开发实践(1)之NDK与JNI开发01
Android游戏开发实践(1)之NDK与JNI开发01 NDK是Native Developement Kit的缩写,顾名思义,NDK是Google提供的一套原生Java代码与本地C/C++代码&q ...
- Android游戏开发实践(1)之NDK与JNI开发02
Android游戏开发实践(1)之NDK与JNI开发02 承接上篇Android游戏开发实践(1)之NDK与JNI开发01分享完JNI的基础和简要开发流程之后,再来分享下在Android环境下的JNI ...
- Android游戏开发实践(1)之NDK与JNI开发04
Android游戏开发实践(1)之NDK与JNI开发04 有了前面几篇NDK与JNI开发相关基础做铺垫,再来通过代码说明下这方面具体的操作以及一些重要的细节.那么,就继续NDK与JNI的学习总结. 作 ...
- Android游戏开发之旅 View类详解
Android游戏开发之旅 View类详解 自定义 View的常用方法: onFinishInflate() 当View中所有的子控件 均被映射成xml后触发 onMeasure(int, int) ...
- Android游戏开发基本知识
Android游戏开发 手机游戏被业内人士称为继短信之后的又一座金矿.Android虽然基于Java,但是其虚拟机是基于寄存器的,速度得到了很大的提升,这为Android平台上开发游戏提供了坚强的后盾 ...
- 《Android游戏开发详解》一1.7 控制流程第1部分——if和else语句
本节书摘来异步社区<Android游戏开发详解>一书中的第1章,第1.7节,译者: 李强 责编: 陈冀康,更多章节内容可以访问云栖社区"异步社区"公众号查看. 1.7 ...
随机推荐
- ubuntu常见错误--Could not get lock /var/lib/dpkg/lock解决
通过终端安装程序sudo apt-get install xxx时出错: E: Could not get lock /var/lib/dpkg/lock - open (11: Resource t ...
- python-opencv在有噪音的情况下提取图像的轮廓
对于一般的图像提取轮廓,这篇博文介绍了一个很好的方法,但是对于有噪声的图像,并不能很好地捕获到目标物体. 比如对于我的鼠标,提取的轮廓效果并不好,因为噪声很多: 所以本文增加了去掉噪声的部分. 首先加 ...
- mock server 前后端分离小结(转)
1.前台开发受限于后台开发的速度 2.后台提供给前台的接口缺字段,时常需要联调 基于Mock Server开发的好处: 对于前端来讲,可以独立于后端进行开发. 对于后端来讲,根据前端定义的接口进行开发 ...
- Appium环境搭建(python)
appium是一个开源的,适用于原生或者移动网络和混合应用程序在 iOS 和 Android 平台上的的开源自动化测试框架.在这里,详细的介绍Appium的环境搭建步骤. 1.安装Node.js在ht ...
- ScrollView嵌套ListView只显示一行
错误描述 ScrollView嵌套ListView中导致ListView高度计算不正确,只显示一行. 解决方法 重写ListView的onMeasure方法,代码如下. @Override publi ...
- 自己动手写fullPage插件
仿造fullPage.js https://alvarotrigo.com/fullPage/#firstPage 自己参照网上教程写了一个,加了注释.主要是练习造轮子的能力,需求是不断变化的只拿来用 ...
- DES、3DES、AES加密方式
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt165 DES 支持8位加密解密,3Des支持24位,Aes支持32位.3De ...
- javascript计算啤酒2元一瓶,4个盖换一瓶,2个瓶换一瓶,10元钱最多喝多少瓶
var n = 0//当前剩下多少瓶加上喝赢了多少瓶 var x = 5//初始多少瓶 var y = 0//除了喝掉的,剩下多少瓶 var z = 0;//总数 var arr = []//定义一个 ...
- 深入理解计算机系统(2.3)------布尔代数以及C语言运算符
本篇博客我们主要讲解计算机中的布尔代数以及C语言的几个运算符. 1.布尔代数 我们知道二进制值是计算机编码.存储和操作信息的核心,随着计算机的发展,围绕数值0和1的研究已经演化出了丰富的数学知识体系. ...
- PHP之CI框架第一课