使用了基于 zeuslabs papervision3d 的 Particle System for Papervision3D
代码如下:
package ex{ import flash.display.Bitmap; import flash.display.BlendMode; import flash.display.Sprite; import flash.events.Event; import flash.filters.BlurFilter; import flash.filters.GlowFilter; import flash.geom.ColorTransform; import org.papervision3d.core.effects.utils.BitmapDrawCommand; import org.papervision3d.core.math.Number3D; import org.papervision3d.render.BasicRenderEngine; import org.papervision3d.scenes.Scene3D; import org.papervision3d.view.Viewport3D; import zeuslabs.particles.ParticleEvent; import zeuslabs.particles.ParticleSystem3D; import zeuslabs.particles.SimpleParticle3D; import org.papervision3d.view.layer.BitmapEffectLayer; import org.papervision3d.core.effects.BitmapLayerEffect; import org.papervision3d.cameras.Camera3D; import flash.display.StageScaleMode; public class Ex4 extends Sprite{ private var r:BasicRenderEngine ; private var s:Scene3D ; private var v:Viewport3D ; private var c:Camera3D; private var pS:ParticleSystem3D; private var bfx:BitmapEffectLayer; private var a:uint=0; private var k:uint=0; public function Ex4(){ stage.scaleMode=StageScaleMode.NO_SCALE; v=new Viewport3D(400,400); addChild(v); v.filters=[new GlowFilter(0xffff00,.5,3,3,3,8)]; r=new BasicRenderEngine(); s=new Scene3D(); c=new Camera3D(); stage.addEventListener(Event.ENTER_FRAME, enterFrameHandle); pS= new ParticleSystem3D( this.stage); pS.spawnRate = 8; pS.particleClass = SimpleParticle3D ; pS.start(); s.addChild(pS); bfx = new BitmapEffectLayer(v,400, 400); v.containerSprite.addLayer(bfx); bfx.addDisplayObject3D(pS); bfx.addEffect(new BitmapLayerEffect(new BlurFilter(5, 5, 4))); bfx.drawLayer.blendMode = BlendMode.OVERLAY; bfx.setScroll(0,-0.5); pS.addEventListener( ParticleEvent.INITIALIZE_PARTICLE, initializeParticle); pS.addEventListener(ParticleEvent.UPDATE_PARTICLE, updateParticle); } public function enterFrameHandle( e:Event ):void{ if (k<100){k++;}else{k=0} if (a<360){a=a+10;}else{a=0;} pS.rotationX = k/3*Math.sin(a*Math.PI/180) pS.rotationY=k*Math.cos(a*Math.PI/180) r.renderScene(s,c,v); } private function initializeParticle(e:ParticleEvent):void{ var p:SimpleParticle3D = SimpleParticle3D(e.particle); bfx.addDisplayObject3D(p); bfx.drawCommand = new BitmapDrawCommand(null,new ColorTransform(Math.random()*2-1,Math.random()*2-1,Math.random()*2-1,1,1),BlendMode.HARDLIGHT); p.size =1; p.lifetime =2000; p.position = new Number3D(0, Math.random()*50-25,0); p.velocity = new Number3D(Math.random()*4-2,50,Math.random()*4-2); } private function updateParticle(e:ParticleEvent):void{ var p:SimpleParticle3D = SimpleParticle3D(e.particle); var age:Number = p.spawnTime%800; p.size +=0.05; p.velocity = new Number3D(Math.sin(age/10)*age/10,Math.cos(age/10)*age/10,p.spawnVelocity.z*6); } } }
回复Comments
作者:
{commentrecontent}