Snow Moebius galias forked:0favorite:0lines:79license : MIT License modified : 2009-08-24 07:33:58 Embed Tweet package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.events.Event; import flash.events.MouseEvent; import org.papervision3d.cameras.CameraType; import org.papervision3d.core.geom.renderables.Particle; import org.papervision3d.materials.special.ParticleMaterial; import org.papervision3d.objects.special.ParticleField; import org.papervision3d.view.BasicView; [SWF(width="1000", height="600", frameRate="30", backgroundColor="0x000000")] public class PV3DFlocking extends BasicView { private var _field :ParticleField; private var _angle :Number = 0; private var _bmp :Bitmap; private var _mouseDown :Boolean = false; private const VELOCITY :Number = 10; private const MAX_INC_ANGLE :Number = .02; public function PV3DFlocking() { super(0, 0, true, false, CameraType.SPRING); stage.addEventListener(MouseEvent.MOUSE_DOWN, handleMouseDown); stage.addEventListener(MouseEvent.MOUSE_UP, handleMouseUp); initBitmap(); init(); startRendering(); } private function initBitmap():void { var bmd:BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight, false, 0x000000); _bmp = new Bitmap(bmd); //addChild(_bmp); } private function init():void { var mat:ParticleMaterial = new ParticleMaterial(0xffffff, 1, 1); _field = new ParticleField(mat, 600); scene.addChild(_field); } private function doRender():void { var particle:Particle; var porc:Number = 0; var valor:Number = 0; var r:uint; var g:uint; var b:uint; for(var i:int = 0; i < _field.particles.length; i ++){ particle = _field.particles[i]; if(particle.x + VELOCITY < 1000){ particle.x += VELOCITY; }else{ particle.x = -1000; } if(particle.y - VELOCITY > -1000 ){ particle.y -= VELOCITY; }else{ particle.y = 1000; } r = randRange(0xcc, 0xff); g = randRange(0xcc, 0xff); b = randRange(0xcc, 0xff); particle.material.fillColor = r << 16 | g << 8 | b; } // porc = Math.round((mouseX * 200) / stage.stageWidth) - 100; // valor = porc * MAX_INC_ANGLE / 100; camera.x = Math.sin(_angle) * 500; camera.z = Math.cos(_angle) * 500; camera.fov += Math.sin(_angle) * 1 _angle+=.01; } private function handleMouseDown(e:MouseEvent):void { _mouseDown = true; } private function handleMouseUp(e:MouseEvent):void { _mouseDown = false; } override protected function onRenderTick(event:Event=null):void { doRender(); super.onRenderTick(); } private function randRange(start:Number, end:Number) : Number { return Math.floor(start +(Math.random() * (end - start))); } } } Code Fullscreen Preview Fullscreen particles pv3d snow CameraType.SPRING fillColor particles Particle MouseEvent MouseEvent.MOUSE_UP MouseEvent.MOUSE_DOWN Math.floor Math.sin Math.cos Boolean BitmapData length uint Math.random int Number