[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 ...
随机推荐
- vue-cli脚手架npm相关文件解读(9)config/index.js
系列文章传送门: 1.build/webpack.base.conf.js 2.build/webpack.prod.conf.js 3.build/webpack.dev.conf.js 4.bui ...
- HBRUSH to RGB value
GetObject函数返回一个LOGBRUSH结构体,包含了COLORREF结构. LOGBRUSH lgbrush; COLORREF color; GetObject((HBRUSH)GetSto ...
- MySQL插入、更新、删除数据
1.插入数据:由于下表的id会自增,故赋值null. 注意:字符串用' '单引号,不能双引号,英文状态下. 可以写上部分属性名进行插入操作,如bookTypeId没写,默认NULL. 也可以写上所 ...
- Just for Today
Just for today I will try to live through this day only and not tackle my whole life problem at once ...
- [2016-07-15]结合命令行工具awk和多行文本编辑器快速生成DataSeed代码
目标:根据业务提供的两份数据,生成DataSeed代码 SampleDataA 上海 华东一线 上饶 华东四线 中山 华南二线 临汾 华北四线 临沂 华东二线 SampleDataB 上海 1D04E ...
- 使用javaconfig配置freemarker
package com.yy.config; import org.springframework.context.annotation.Bean; import org.springframewor ...
- Javascript用数组实现栈和队列
栈是遵循后进先出(LIFO)规则的一种有序集合,比如桌上的一叠书,我们只能从上面放或取. 队列是遵循先进先出(FIFO)规则的一种有序集合,比如排队,先排到的先离开. 数组也是一种有序的集合,它与上面 ...
- ASP.NET Core的身份认证框架IdentityServer4(8)- 使用密码认证方式控制API访问
前言 本文及IdentityServer这个系列使用的都是基于.net core 2.0的.上一篇博文在API项目中我使用了icrosoft.AspNetCore.Authentication.Jwt ...
- cocoapods的安装和使用以及版本升级遇到的问题
一.CocoaPods是什么? CocoaPods是一个负责管理iOS项目中第三方开源库的工具.CocoaPods的项目源码在Github上管理.该项目开始于2011年8月12日,在这两年多的时间里, ...
- java程序的内存分配
java程序的内存分配 JAVA 文件编译执行与虚拟机(JVM)介绍 Java 虚拟机(JVM)是可运行Java代码的假想计算机.只要根据JVM规格描述将解释器移植到特定的计算机上,就能保证经过编译的 ...