canvas教程

Android游戏开发学习②焰火绽放效果实现方法(2)

字号+ 作者:H5之家 来源:H5之家 2016-05-08 10:00 我要评论( )

package com.particle; import android.graphics.Canvas; import android.view.SurfaceHolder; public class DrawThread extends Thread {ParticleView pv;SurfaceHolder surfaceHolder;boolean flag=false;int sle

package com.particle; import android.graphics.Canvas; import android.view.SurfaceHolder; public class DrawThread extends Thread { ParticleView pv; SurfaceHolder surfaceHolder; boolean flag=false; int sleepSpan=30; long start =System.nanoTime(); //记录起始时间,该变量用于计算帧速率 int count=0 ; //记录帧数 public DrawThread(ParticleView pv,SurfaceHolder surfaceHolder) { this.pv=pv; this.surfaceHolder=surfaceHolder; this.flag=true; } public void run() { Canvas canvas=null; while(flag) { try { canvas=surfaceHolder.lockCanvas(null); //获取BallView的画布 synchronized (surfaceHolder) { pv.doDraw(canvas); } } catch (Exception e) { e.printStackTrace(); } finally { if(canvas!=null) { surfaceHolder.unlockCanvasAndPost(canvas); // surfaceHolder解锁,并将画布传回 } } this.count++; if(count==20) { //计满20帧时计算一次帧速率 count=0; long tempStamp=System.nanoTime(); long span=tempStamp-start; start=tempStamp; double fps=Math.round(100000000000.0/span*20)/100.0; pv.fps="FPS:"+fps; } try { Thread.sleep(sleepSpan); } catch (InterruptedException e) { e.printStackTrace(); } } } }

MainActivity类:

package com.particle; import android.app.Activity; import android.os.Bundle; import android.view.Window; import android.view.WindowManager; public class MainActivity extends Activity { ParticleView pv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); //设置不显示标题 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); //设置全屏 pv=new ParticleView(this); setContentView(pv); } }

效果图:

二、瀑布粒子效果

瀑布粒子和焰火粒子十分类似,二者的运动都是带有初速度的下落运动。所不同的是焰火粒子水平方向和竖直方向的速度均不为零,而瀑布粒子只有水平方向初速度,竖直方向初速度为零。只需在焰火粒子的生成部分ParticleSet类中修改即可。

ParticleSet类add方法修改如下:

/** * 向粒子集合中添加指定数量的粒子对象(瀑布粒子效果) */ public void add2(int count, double startTime) { for (int i = 0; i < count; i++) { int tempColor = this.getColor(i); int tempR = 1; // 粒子半径 double tempv_v = 0; // 粒子竖直方向的速度为0 double tempv_h = 10 + 20 * (Math.random()); // 随机产生粒子水平方向的速度 int tempX = 50; int tempY = (int) (50 - 10 * (Math.random())); // 随机产生粒子Y坐标,90到100之间 Particle particle = new Particle(tempColor, tempR, tempv_v, tempv_h, tempX, tempY, startTime); particleSet.add(particle); } }

效果图:

希望本文所述对大家的Android程序设计有所帮助。

您可能感兴趣的文章:

Tags:Android 游戏

相关文章

最新评论

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 13问13答全面学习Android View绘制

    13问13答全面学习Android View绘制

    2016-05-07 17:00

  • Android动画之渐变动画(Tween Animation)详解 (渐变、缩放、位移

    Android动画之渐变动画(Tween Animation)详解 (渐变、缩放、位移

    2016-04-30 14:00

网友点评