Forked from: costa's LineMix Wash diff:17 forked from: LineMix Wash costa forked:1favorite:2lines:199license : MIT License modified : 2009-07-03 19:06:43 Embed Tweet // forked from costa's LineMix Wash package { import flash.display.Sprite; import flash.events.Event; import flash.events.ProgressEvent; import flash.media.Sound; import flash.media.SoundChannel; import flash.media.SoundLoaderContext; import flash.media.SoundMixer; import flash.net.URLRequest; import flash.system.Security; import flash.text.TextField; import flash.utils.ByteArray; [SWF(width='500',height='500',backgroundColor='0xffffff',frameRate='40')] public class LineMix extends Sprite { public static const PROXY:String = "http://www.facecartoon.cn/upload/music/"; public static const CROSSDOMAIN:String = "http://www.facecartoon.cn/upload/music/crossdomain.xml"; private var linesHolder:Sprite; private var brushNums:uint = 5; private var brushArray:Array = []; private var bgm:Sound; private var bgmChannel:SoundChannel; private var ba:ByteArray; private var loadTxt:TextField; public function LineMix() { Security.loadPolicyFile(CROSSDOMAIN); loadTxt=new TextField(); loadTxt.x=250; loadTxt.y=200; addChild(loadTxt); initSound(); } private function onEnterFrameHandler(e:Event):void { onBrushTimerHandler() } private function onBrushTimerHandler():void { //soundBo SoundMixer.computeSpectrum(ba, false, 0); refushBrush(ba.readFloat()); } private function initSound():void { //bgm = new Bgm(); ba = new ByteArray(); bgm = new Sound(); var sContext:SoundLoaderContext=new SoundLoaderContext(1000,true); bgm.load(new URLRequest(PROXY+'mixWeb.mp3'),sContext); bgm.addEventListener(ProgressEvent.PROGRESS,onSoundLoadProgressHandler); bgm.addEventListener(Event.COMPLETE, onSoundLoadCompleteHandler); //onSoundLoadCompleteHandler(null); } private function onSoundLoadProgressHandler(e:ProgressEvent):void { loadTxt.text=Math.floor(e.bytesLoaded/e.bytesTotal*100)+'%'; } private function onSoundLoadCompleteHandler(e:Event=null):void { removeChild(loadTxt); bgmChannel = bgm.play(); linesHolder = new Sprite(); addChild(linesHolder); //bgMc.mask = linesHolder; for (var i:uint = 0; i < brushNums; i++) { var brush:Brush = new Brush(Math.random()*3,Math.random()*100-50); linesHolder.addChild(brush); brushArray.push(brush); } addEventListener(Event.ENTER_FRAME, onEnterFrameHandler); } private function refushBrush($scale:Number):void { trace('scale=====,',$scale); for (var i:uint = 0; i < brushNums; i++) { var brush:Brush = brushArray[i] as Brush; brush.moveForward(20); if (i>0) brush.moveBalls($scale); brush.rotateHead(brush.mouseX, brush.mouseY); } } } } import caurina.transitions.Tweener; import flash.display.Sprite; import flash.geom.Point; class Brush extends Sprite { private var _thickness:Number; private var _lineHead:Sprite; private var pointsObj:Object; static public var MAX_LINES:uint = 100; private var ball_1:Sprite; private var ball_2:Sprite; private var linesNum:uint; private var lineBox:Sprite; private var _stepX:Number ; private var theta1:Number = 0; private var theta2:Number = 10; private var _positionY:Number; public function Brush($thickness:Number,$positionY:Number) { _positionY = $positionY; _thickness = $thickness; _lineHead = new Sprite(); addChild(_lineHead); _lineHead.alpha = 0; _lineHead.graphics.lineStyle(1, 0x0000ff); _lineHead.graphics.moveTo( 0, 20); _lineHead.graphics.lineTo(15, 0); _lineHead.graphics.lineTo(0, -20); _lineHead.graphics.lineTo(0, 20); ball_1 = drawBall(0xff0000); ball_2 = drawBall(0x00ff00); _lineHead.addChild(ball_1); _lineHead.addChild(ball_2); ball_1.x = 0; ball_1.y =0; ball_2.x = 0; ball_2.y =0; pointsObj = new Object(); pointsObj.prevPoints = []; pointsObj.nextPoints = []; lineBox = new Sprite(); addChild(lineBox); } public function rotateHead($targetX:Number,$targetY:Number):void { var dx:Number = $targetX - _lineHead.x; var dy:Number = $targetY - _lineHead.y; var rotationAngel:Number = Math.atan2(dy, dx) * 180 / Math.PI; Tweener.addTween(_lineHead, { rotation :rotationAngel, time:2 } ); _lineHead.rotation = rotationAngel; //trace(rotationAngel) Tweener.addTween(_lineHead, { x: $targetX, y:$targetY, time:.5, onUpdate:updateLine } ); } private function updateLine():void { if (pointsObj.prevPoints.length == 0) { var point1:Point = new Point(ball_1.x, ball_1.y); point1 = ball_1.localToGlobal(point1); var point2:Point = new Point(ball_2.x, ball_2.y); point2 = ball_2.localToGlobal(point2); pointsObj.prevPoints[0] = point1; pointsObj.prevPoints[1] = point2; }else { point1 = new Point(ball_1.x, ball_1.y); point1 = ball_1.localToGlobal(point1); point2 = new Point(ball_2.x, ball_2.y); point2 = ball_2.localToGlobal(point2); pointsObj.nextPoints[0] = point1; pointsObj.nextPoints[1] = point2; //drawLineClip var lineClip:Sprite = new Sprite; lineBox.addChild(lineClip); //lineClip.graphics.lineStyle(1, 0xff0000, 1); lineClip.graphics.beginFill(0x000000, 1); lineClip.graphics.moveTo(pointsObj.prevPoints[0].x-x, pointsObj.prevPoints[0].y-y); lineClip.graphics.lineTo(pointsObj.nextPoints[0].x-x+_stepX, pointsObj.nextPoints[0].y-y); lineClip.graphics.lineTo(pointsObj.nextPoints[1].x-x+_stepX, pointsObj.nextPoints[1].y-y); lineClip.graphics.lineTo(pointsObj.prevPoints[1].x-x, pointsObj.prevPoints[1].y-y); lineClip.graphics.endFill(); pointsObj.prevPoints[0] = pointsObj.nextPoints[0]; pointsObj.prevPoints[1] = pointsObj.nextPoints[1]; linesNum++; if (linesNum > MAX_LINES) { lineBox.removeChildAt(0); } } } private function drawBall($color:uint):Sprite { var ball:Sprite = new Sprite; ball.graphics.lineStyle(1,0xff0000,1) //ball.graphics.beginFill($color, .5); ball.graphics.drawCircle(0, 0, 5); return ball; } public function moveForward($step:uint):void { _stepX = $step; x -= $step; } public function moveBalls($theataClip:Number):void { theta1 +=$theataClip*10; theta2 += $theataClip*10; //ball_1.y =Math.sin(theta1) * _thickness*2 +_positionY*$theataClip*3; //ball_2.y = Math.sin(theta2) * _thickness*2 +_positionY*$theataClip*3; Tweener.addTween(ball_1,{y:Math.sin(theta1) * _thickness*2 +_positionY*$theataClip,time:1}); Tweener.addTween(ball_2,{y:Math.sin(theta2) * _thickness*2 +_positionY*$theataClip,time:1}); } public function scaleBrush($theataClip:Number):void { if(_thickness * $theataClip/2>0) { Tweener.addTween(ball_1, { y:_thickness * $theataClip/2+1, time:.5} ); Tweener.addTween(ball_2, { y: -_thickness * $theataClip/2-1, time:.5 } ); } } } Code Fullscreen Preview Fullscreen ahsx hacker_qrwhw.. : Great localToGlobal Tweener.addTween time ProgressEvent.ENTER_FRAME bytesTotal ProgressEvent.COMPLETE bytesLoaded addEventListener ProgressEvent SoundMixer.computeSpectrum ByteArray rotation ProgressEvent.PROGRESS removeChildAt readFloat alpha mouseY mouseX Security.loadPolicyFile Point sort new page view favorite forked pv326 forked from: forked from: Line.. gigig forked:1 favorite:1lines:199 (diff:1)