forked from: うにょうにょ動く線

by yotsu42keisuke forked from うにょうにょ動く線 (diff: 1)
マウスを使って線を書きます。
書いた線がうごきます。
どこかでみたような感じですね。
♥0 | Line 87 | Modified 2011-01-05 23:03:04 | MIT License
play

ActionScript3 source code

/**
 * Copyright yotsu42keisuke ( http://wonderfl.net/user/yotsu42keisuke )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/pXbT
 */

// forked from mmlemon_'s うにょうにょ動く線
package
{
    import flash.accessibility.Accessibility;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.events.TimerEvent;
    import flash.geom.Point;
    import flash.media.Sound;
    import flash.media.SoundChannel;
    import flash.media.SoundMixer;
    import flash.net.URLRequest;
    import flash.utils.ByteArray;
    import flash.utils.Timer;
    
    /**
     * マウスを使って線を書きます。
     * 書いた線がうごきます。
    * どこかでみたような感じですね。
     */
    [SWF(backgroundColor=0x0,frameRate=60,width=465,height=465)]
    public class ShakeLine extends Sprite
    {
        
        private var m_strokes:Vector.<Vector.<Point>>;
        private var m_isDown:Boolean = false;
        private var m_timer:Timer;
        private var m_snd:Sound;
        private var m_sndChannel:SoundChannel;
        private var m_sndVolume:Number;
        
        private function init():void
        {
            m_strokes = new Vector.<Vector.<Point>>();
            stage.addEventListener(MouseEvent.MOUSE_DOWN, startDraw, false, 0, false);
            stage.addEventListener(MouseEvent.MOUSE_UP, stopDraw, false, 0, false);
            m_timer = new Timer(100);
            m_timer.addEventListener(TimerEvent.TIMER, timerHandler, false, 0, false);
        }
        private function timerHandler(event:TimerEvent):void
        {
            var len:uint = m_strokes.length;
            graphics.clear();
            graphics.lineStyle(1, 0xffffff, 1);
            var rx:Number;
            var ry:Number;
            for(var i:uint=0; i < len; i++)
            {
                var inner:Vector.<Point> = m_strokes[i];
                var innerlen:uint = m_strokes[i].length;
                rx = Math.random()*5-10;
                ry = Math.random()*5-10;
                graphics.moveTo(inner[0].x+rx, inner[0].y+ry);
                for(var j:uint = 1; j < innerlen; j++)
                {
                    var pt:Point = inner[j];
                    rx = Math.random()*5-10;
                    ry = Math.random()*5-10;
                    graphics.lineTo(pt.x+rx, pt.y+ry);
                }
            }
            graphics.endFill();
        }
        private function startDraw(event:MouseEvent):void
        {
            m_isDown = true;
            
            var newVec:Vector.<Point> = new Vector.<Point>();
            var pt:Point = new Point(event.stageX, event.stageY);
            if(m_strokes.length > 0){
                m_strokes.push(new Vector.<Point>());
            }
            else{
                m_strokes[0] = new Vector.<Point>();
            }
            m_strokes[m_strokes.length-1].push(pt);
            stage.addEventListener(MouseEvent.MOUSE_MOVE, draw, false, 0, false);
            if(!m_timer.running){
                m_timer.start();
            }
        }
        private function draw(event:MouseEvent):void
        {
            m_strokes[m_strokes.length-1].push(new Point(event.stageX, event.stageY));
        }
        private function stopDraw(event:MouseEvent):void
        {
            stage.removeEventListener(MouseEvent.MOUSE_MOVE, draw, false);
            m_isDown = false;
        }
        public function ShakeLine()
        {
            init();
        }
    }
}