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 游戏
相关文章
最新评论