ラインを沢山引きます okoi forked:14favorite:62lines:136license : MIT License modified : 2010-03-11 00:58:48 Embed Tweet // forked from okoi's flash on 2010-3-11 package { import flash.display.Sprite; import flash.display.MovieClip import flash.display.Sprite; import flash.display.Graphics; import flash.events.Event; import flash.events.MouseEvent; import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.BlendMode; public class FlashTest extends Sprite { var pathMC:MovieClip = new MovieClip(); var pathlist:Array = new Array(); var drawBMPData:BitmapData; var drawBMP:Bitmap; var drawMC:MovieClip = new MovieClip(); var drawFlag:Boolean = false; public function FlashTest() { // write as3 code here.. if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point // BackGround var g:Graphics = graphics; g.beginFill( 0x000000 ); g.drawRect( 0, 0, stage.stageWidth, stage.stageHeight ); // addMC addChild(pathMC); drawBMPData = new BitmapData( stage.stageWidth, stage.stageHeight, true, 0x00000000 ); drawBMP = new Bitmap(drawBMPData); addChild(drawBMP); // CreatePath var p:Path = new Path(); for ( var i:int = 0; i < 200; i++ ) { p = new Path(); p.Init(0, 0, 5 + (i/20), 0.5, 50); pathlist.push(p); } addEventListener(Event.ENTER_FRAME, EnterFrame); stage.addEventListener(MouseEvent.MOUSE_DOWN, ChangeDrawFlag ); stage.addEventListener(MouseEvent.MOUSE_UP, ChangeDrawFlag ); } public function EnterFrame(event:Event):void { // DrawPath var g:Graphics = pathMC.graphics; g.clear(); g.beginFill( 0xFFFFFF, 1 ); //g.lineStyle (10, 0x000000, 1.0); // 線のスタイル for each ( var p:Path in pathlist ) { // マウスの位置更新 p.SetMousePos( stage.mouseX, stage.mouseY ); if( !drawFlag ) g.drawCircle( p.point.x, p.point.y, 1 ); } // 描画処理 if ( drawFlag ) { g = drawMC.graphics; g.clear(); for ( var i:int = 0; i < pathlist.length - 1; i++ ) { g.lineStyle (1, pathlist[i].color, 0.1); // 線のスタイル g.moveTo( pathlist[i].prev.x, pathlist[i].prev.y ); g.lineTo( pathlist[i].point.x, pathlist[i].point.y ); } // 書いたデータをビットマップに追加 drawBMPData.draw( drawMC, null, null, BlendMode.ADD ); } } public function ChangeDrawFlag(event:MouseEvent):void { if ( drawFlag ) drawFlag = false; else drawFlag = true; //var color:Array = [0xFF0000 , 0xFFFF00 , 0x00FF00 , 0x00FFFF , 0x0000FF]; var colorMax:uint = 0xFFFF; var colorMin:uint = 0xFF00; for ( var i:int = 0; i < pathlist.length - 1; i++ ) { pathlist[i].color = 0xFF0000 + 0xFF00 * (i/(pathlist.length-1)); } } } } import flash.display.MovieClip; import flash.events.Event; import flash.geom.Point; internal class Path extends MovieClip { var prev:Point = new Point(); var point:Point = new Point(); var mouse:Point = new Point(); var move:Point = new Point(); var accele:Number = 1; var slowdown:Number = 1; var maxspeed:Number = 1; var color:uint; public function Path() { super(); addEventListener(Event.ENTER_FRAME, EnterFrame ); } /** * * @param x * @param y * @param accele マウスから離れて行く時の加速値 * @param _effect */ public function Init(x:int = 0, y:int = 0, _accele:Number = 1, _slowdown:Number = 1, _maxspeed:Number = 20):void { prev.x = point.x = x; prev.y = point.y = y; move.x = 0; move.y = 0; accele = _accele; slowdown = _slowdown; maxspeed = _maxspeed; } public function SetMousePos(x:int, y:int):void { mouse.x = x; mouse.y = y; } public function EnterFrame(event:Event):void { prev.x = point.x; prev.y = point.y; // マウスとの距離を出す // そこから影響係数を掛けて移動力を出す var nowLen:Number = Math.sqrt( (mouse.x - prev.x) * (mouse.x - prev.x) + (mouse.y - prev.y) * (mouse.y - prev.y) ); //var power:Number = len * power; var rad:Number = Math.atan2((mouse.y - point.y), (mouse.x - point.x)); /* move.x /= 0.5; move.y /= 0.5; var rate:Number = 1 - (len / 100); if ( rate < 0 ) rate = 0; var power:Number = 1 + rate * 10; //if ( 100 - len > 0 ) rate = (100-len)/10; power = 1; move.x += Math.cos( rad ) * power; move.y += Math.sin( rad ) * power; */ move.x += Math.cos( rad ) * accele; move.y += Math.sin( rad ) * accele; // 移動速度、角度算出 // あまりにも速度が大きくなったら正規化する var moveS:Number = Math.sqrt( move.x * move.x + move.y * move.y ); var moveR:Number = Math.atan2(move.y, move.x); if ( moveS >= maxspeed ) { move.x = Math.cos( moveR ) * maxspeed; move.y = Math.sin( moveR ) * maxspeed; } point.x += move.x; point.y += move.y; // 離れていってる時ならスピード減衰 var nextLen:Number = Math.sqrt( (mouse.x - point.x) * (mouse.x - point.x) + (mouse.y - point.y) * (mouse.y - point.y) ); if ( nowLen < nextLen ) { move.x *= slowdown; move.y *= slowdown; } } } Code Fullscreen Preview Fullscreen medadotter dowl606 retu27 k_bana jackfreak ProjectNya TIAGODJF tatsuhico bongiovi015 hacker_0x2kx.. DOS masanof_BUSH.. fakestar0826.. codeonwort wonderwhyer Merd vasylbo tkinjo Murai Ryogo_Qubere.. jttya_fla xor shevchenko ninehundred OKASUKE paq say0 postnum geko abtky Kirill.Rybin.. ezshine_y acescoorpio dory yamat hacker_aft9c.. kitsionchen ngtn linjack uwi nobuakiFurus.. yasai zawa carbonhci : 互动图形图像特效粒子 hacker_cqi4n.. : line hacker_rs10v.. : painting effect zmaxlin : awesomedrawing Lumirun : ライン Louis2009 : BetweenAS3 Giggle : bitmapdatabrushparticle iki_xx : generatorimage noenoe : モヤモヤ bu_kala : lines jjroox747 : BitmapDatamotionmouseparticle OneInchPunch.. : kireiline nitoyon : brushたくさんの動く点がブラシに。とても面白い描画効果。 a440hlz : beautiflline clockmaker : graphicsparticle ijeoma : 3ddrawingpainting onedayitwill.. : 3dbitmapdatadrawingexplorememotionpaintingrecordingbeautiful particles _Andros_ : particles Susisu : 綿飴 3d BetweenAS3 awesome beautifl bitmapdata brush drawing exploreme generator graphics image kirei line lines motion mouse painting particle particles recording ライン 互动 图形图像 特效 粒子 MovieClip addEventListener addChild Math.sqrt stage Point Math.atan2 mouseX mouseY removeEventListener Event.ADDED_TO_STAGE length graphics Math.cos Event.ENTER_FRAME Event Math.sin push Boolean Array sort new page view favorite forked pv40 forked from: ラインを沢山引きます k_masa forked:0 favorite:0lines:136 (diff:15) pv143 forked from: ラインを沢山引きます Luis.Rodriguez forked:0 favorite:0lines:136 (diff:1) pv110 forked from: ラインを沢山引きます romeo141 forked:0 favorite:0lines:136 (diff:1) pv140 forked from: ラインを沢山引きます sakaguti3 forked:0 favorite:1lines:136 (diff:1) pv166 forked from: ラインを沢山引きます ignaciomaderna forked:0 favorite:1lines:136 (diff:1) pv212 forked from: ラインを沢山引きます minuskumpel forked:0 favorite:0lines:136 (diff:1) pv0 forked from: ラインを沢山引きます minuskumpel forked:0 favorite:0lines:136 (diff:1) pv187 forked from: ラインを沢山引きます hirohide forked:1 favorite:0lines:135 (diff:2) 1 2NEXT