flash on 2010-3-6 hiro_rec forked:1favorite:0lines:163license : MIT License modified : 2010-03-06 02:26:48 Embed Tweet package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.BlendMode; import flash.display.Sprite; import flash.events.Event; import flash.events.TimerEvent; import flash.filters.BlurFilter; import flash.filters.ColorMatrixFilter; import flash.filters.GlowFilter; import flash.geom.Point; import flash.utils.Timer; [SWF(width="400", height="400", frameRate="48", backgroundColor="0x000000")] public class LineTest06 extends Sprite { private var lines:Array = []; private var bmd:BitmapData; private var bmp:Bitmap; private var container:Sprite; private var matrix:Array = [ 1.0, 0, 0, 0, 0, 0, 1.1, 0, 0, 0, 0, 0, 1.5, 0, 0, 0, 0, 0, 0.49, 0 ]; private var matrixFilter:ColorMatrixFilter = new ColorMatrixFilter(matrix); private var point:Point = new Point(); private var timer:Timer; public function LineTest06() { timer = new Timer(100, 20); timer.addEventListener(TimerEvent.TIMER, timerHandler); timer.start(); container = new Sprite(); container.x = stage.stageWidth / 2; container.y = stage.stageHeight / 2; container.rotationY = 90; addChild(container); bmd = new BitmapData(stage.stageWidth, stage.stageHeight, true, 0x00000000); bmp = new Bitmap(); bmp.bitmapData = bmd; bmp.blendMode = BlendMode.HARDLIGHT; addChild(bmp); addEventListener(Event.ENTER_FRAME, render); } private function timerHandler(event:TimerEvent):void { var line:Line = new Line(); container.addChild(line); lines.push(line); } private function render(event:Event):void { for (var i:int = 0; i < lines.length; i++) { var line:Line = lines[i]; line.render(); } bmd.draw(stage); bmd.applyFilter(bmd, bmd.rect, point, matrixFilter); bmd.applyFilter(bmd, bmd.rect, point, new GlowFilter(0x0042ff, 0.05, 10, 1, 3)); bmd.applyFilter(bmd, bmd.rect, point, new BlurFilter(1, 1)); container.rotationY += (stage.mouseX - stage.stageHeight / 2 - container.rotationY) * 0.01; container.rotationZ += (stage.mouseY - stage.stageWidth / 2 - container.rotationZ) * 0.01; } } } import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.BlendMode; import flash.display.Sprite; import flash.events.Event; import flash.filters.BlurFilter; import flash.filters.ColorMatrixFilter; import flash.filters.GlowFilter; import flash.geom.Point; class Line extends Sprite { private var points:Array; private var index:int = 0; private var bmd:BitmapData; private var bmp:Bitmap; private var matrix:Array = [ 1.3, 0, 0, 0, 0, 0, 1.0, 0, 0, 0, 0, 0, 1.8, 0, 0, 0, 0, 0, 0.49, 0 ]; private var matrixFilter:ColorMatrixFilter = new ColorMatrixFilter(matrix); private var point:Point = new Point(); private var radius:int = 400; public function Line() { //filters = [new GlowFilter(0x0078ff, 0.7, 10, 10, 5, 2)]; reset(); } private function reset():void { index = 0; points = []; var len:int = 30; for (var i:int = 0; i < len; i++) { points.push(new Point(i * 250 - 2000, Math.random() * 1.5 * (len - i))); } y = Math.sin(Math.PI / 180 * Math.random() * 360) * radius; z = Math.cos(Math.PI / 180 * Math.random() * 360) * radius; } public function render():void { graphics.clear(); setPoints(); index++; } private function setPoints():void { var v:Vector.<Point> = new Vector.<Point>(); var len:int = 10; for (var i:uint; i < len; i++) { var point:Point = points[i + index]; if (!point) { reset(); return; } v[i] = new Point(point.x, point.y); } drawSpline(v); } private function drawSpline(v:Vector.<Point>):void { if(v.length < 2) return; v.splice(0, 0, v[0]); v.push(v[v.length-1]); var numSegments:uint = 20;//曲線分割数(補完する数) for(var i:uint=0; i<v.length - 3; i++) { var p0:Point = v[i]; var p1:Point = v[i+1]; var p2:Point = v[i+2]; var p3:Point = v[i+3]; splineTo(p0, p1, p2, p3, numSegments); } } private function splineTo(p0:Point, p1:Point, p2:Point, p3:Point, numSegments:uint):void { graphics.moveTo(p1.x, p1.y); graphics.lineStyle(2, 0xFFFFFF); for(var i:uint=0; i<numSegments; i++) { var t:Number = (i+1)/numSegments; graphics.lineTo(catmullRom(p0.x, p1.x, p2.x, p3.x, t), catmullRom(p0.y, p1.y, p2.y, p3.y, t)); } } public function catmullRom(p0:Number, p1:Number, p2:Number, p3:Number, t:Number):Number { var v0:Number = (p2 - p0) * 0.5; var v1:Number = (p3 - p1) * 0.5; return (2 * p1 - 2 * p2 + v0 + v1) * t * t * t + (-3 * p1 + 3 * p2 - 2 * v0 - v1) * t * t + v0 * t + p1; } } Code Fullscreen Preview Fullscreen Point rotationY rotationZ reset blendMode stage length GlowFilter splice start mouseY mouseX Timer addChild Math.PI addEventListener Vector push Math.cos Array sort new page view favorite forked pv40 forked from: flash on 2010-3-6.. vlad.el.rojo forked:0 favorite:0lines:163 (diff:1)