粒子系统

其运行效果如下所示:



存储粒子系统中的某个粒子物理信息的类:

public class SingleGrain {
	float vx;//x轴速度分量
	float vy;//y轴速度分量
	float vz;//z轴速度分量
	float timeSpan=0;//累计时间
	
	public SingleGrain(float vx,float vy,float vz)
	{
		this.vx=vx;
		this.vy=vy;
		this.vz=vz;		
	}
	
	public void drawSelf()
	{
		MatrixState.pushMatrix();	
		//根据当前时间戳计算出粒子位置
		float x=vx*timeSpan;
		float z=vz*timeSpan;
		float y=vy*timeSpan-0.5f*timeSpan*timeSpan*1.5f+3.0f;		
		MatrixState.translate(x, y, z);
		//绘制粒子
		GrainGroup.gfd.drawSelf();
		MatrixState.popMatrix();
	}
}


代表粒子系统的类:

public class GrainGroup {
	//用于绘制的粒子
	static GrainForDraw gfd;     
	//所有粒子的列表
	ArrayList<SingleGrain> al=new ArrayList<SingleGrain>();
 	static final float SPEED_SPAN=(float) (1.5f+1.5f*Math.random());//粒子初速度
	static final float SPEED=0.02f;//粒子移动每一步的模拟时延,也就是时间戳间隔
	
     public GrainGroup(MySurfaceView mv)
     {
    	//初始化用于绘制的六个不同颜色的粒子
    	gfd=new GrainForDraw(4,1,1,1,mv);
    	//随机添加粒子
 		for(int i=0;i<400;i++)
 		{
 			//随机产生粒子的方位角及仰角
 			double elevation=0.35f*Math.random()*Math.PI+Math.PI*0.15f;//仰角
 			double direction=Math.random()*Math.PI*2;//方位角
 			//计算出粒子在XYZ轴方向的速度分量
 			float vy=(float)(SPEED_SPAN*Math.sin(elevation));	
 			float vx=(float)(SPEED_SPAN*Math.cos(elevation)*Math.cos(direction));	
 			float vz=(float)(SPEED_SPAN*Math.cos(elevation)*Math.sin(direction));	
 			//创建粒子对像并添加进粒子列表
 			al.add(new SingleGrain(vx,vy,vz));
 		}
     }
     
     long timeStamp=0;
     public void drawSelf()
     {
    	 long currTimeStamp=System.nanoTime()/1000000;
    	 if(currTimeStamp-timeStamp>10)
    	 {
    		 for(SingleGrain sp:al)
        	 {//扫描粒子列表,并修改粒子时间戳
        		sp.timeSpan=sp.timeSpan+SPEED;
        		if(sp.timeSpan>10)  
        		{
        			sp.timeSpan=0;
        		}
        	 }
    		 timeStamp=currTimeStamp;
    	 }
    	 
		 int size=al.size();
		 //循环扫描所有粒子的列表并绘制各个粒子
		 for(int i=0;i<size;i++)
    	 {
			 try
	    	 {
    		   al.get(i).drawSelf();
	    	 }
			 catch(Exception e){}
    	 } 
     }
}



下载资源:高级收索——anzhongliu,即可下载。

posted @ 2015-05-20 12:41  Anzhongliu  阅读(184)  评论(0编辑  收藏  举报