forked from: 俺はそう考えてる

by bradsedito forked from 俺はそう考えてる (diff: 10)
壷ったのでなんとなく。

「亀田の親父のブログが面白すぎる件」
http://blog.livedoor.jp/news23vip/archives/1964823.html

俺はそう考えてる
♥0 | Line 99 | Modified 2011-07-01 16:18:02 | MIT License
play

ActionScript3 source code

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





package
{
    import __AS3__.vec.Vector; 
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.GradientType;
    import flash.display.Shape;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.filters.BlurFilter;
    import flash.geom.ColorTransform;
    import flash.geom.Matrix;
    import flash.geom.Point;
    import net.hires.debug.Stats;
    import org.papervision3d.objects.special.commands.LineStyle;
    
    [SWF(width="465", height="465", backgroundColor="0x000000", frameRate="60")]
    public class ytti_OrehaSouKangaeteru extends Sprite
    {
        private var _tfcanvas:BitmapData;
        private var _pts:Vector.<Point> = new Vector.<Point>();
        private var _linecanvas:BitmapData;
        private var _drawshape:Shape;
        private var _colorTran:ColorTransform = new ColorTransform(0.99,0.99,0.99,0.99);
        private var _blurFilter:BlurFilter = new BlurFilter(4,4,1);
        
        public function ytti_OrehaSouKangaeteru()
        {
            addEventListener(Event.ADDED_TO_STAGE , _init );
        }
        
        private function _init(e:Event):void {
            removeEventListener(Event.ADDED_TO_STAGE , _init );
            
            //TextField作成
            var oretf:Sprite = new OreTextField();
            
            //一時的にBitmapDataにdraw
            var mat:Matrix = new Matrix(1,0,0,1,(465-oretf.width)>>1,(465-oretf.height)>>1);
            var temp:BitmapData = new BitmapData(465,465,false,0x0);
            temp.draw(oretf,mat);
            
            //一定間隔でsetPixel32 & 位置を保存
            _tfcanvas = new BitmapData(465,465,true,0x00FFFFFF);
            var margin:int = 4;
            for(var iy:int = 0;iy < _tfcanvas.height;iy=iy+margin ){
                for(var ix:int = 0;ix < _tfcanvas.width;ix=ix+margin ){
                    if(temp.getPixel(ix,iy)) {
                        _tfcanvas.setPixel32(ix,iy,0xFFFFFFFF);
                        _pts.push(new Point(ix,iy));
                    }
                }
            }
            //ライン用のBitmapData
            _linecanvas = new BitmapData(465,465,true,0x00FFFFFF);
            addChild(new Bitmap(_linecanvas));
            
            addChild(new Bitmap(_tfcanvas));
            
            //ライン作成用
            _drawshape = new Shape();
            
            addEventListener(Event.ENTER_FRAME , _update );
            addChild(new Stats());
        }
        
        private function _update(e:Event):void {
            //ラインクリア
            _drawshape.graphics.clear();
            
            _linecanvas.lock();
            for(var i:Number = 0;i < _pts.length;i++ ){
                //全部書くと重いので。。。。
                if(i%4 != 0) continue;
                
                //マウス位置からPixel位置の距離とか角度とか
                var dx:Number = _pts[i].x - mouseX;
                var dy:Number = _pts[i].y - mouseY;
                var angle:Number = Math.atan2(dy,dx);
                var dist:Number = Math.sqrt(dx*dx + dy*dy);
                //ライン終点位置
                var tx:Number = _pts[i].x + Math.cos(angle) * dist;
                var ty:Number = _pts[i].y + Math.sin(angle) * dist;
                
                //ライン書く
                _drawshape.graphics.lineStyle(2);
                var mat:Matrix = new Matrix();
                mat.createGradientBox(465,465,angle);
                _drawshape.graphics.lineGradientStyle(
                    GradientType.LINEAR,
                    [0xFF00FF*Math.random(),
                    0xFF00FF*Math.random()],
                    [0.5,0],[0,255],mat
                );
                _drawshape.graphics.moveTo(_pts[i].x,_pts[i].y);
                _drawshape.graphics.lineTo(tx,ty);
            }
            _linecanvas.draw(_drawshape);
            _linecanvas.unlock();
            
            //フィルター
            _linecanvas.applyFilter(_linecanvas , _linecanvas.rect , new Point() , _blurFilter);
            _linecanvas.colorTransform(_linecanvas.rect , _colorTran );
        }
    }
}

import flash.text.TextField;
import flash.display.Sprite;
import flash.text.TextFormat;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormatAlign;

class OreTextField extends Sprite
{
    public function OreTextField(){
        var tf:TextField = new TextField();
        var fmt:TextFormat = new TextFormat("_ゴシック" , 56 , 0xFFFFFF );
        fmt.align = TextFormatAlign.CENTER;
        tf.defaultTextFormat = fmt;
        tf.autoSize = TextFieldAutoSize.LEFT;
        tf.multiline = true;
        
        addChild(tf);
        tf.text = "俺はそう\n考えてる";
    }
}