flash on 2011-6-23

by yama3
♥0 | Line 90 | Modified 2011-06-23 15:47:18 | MIT License
play

ActionScript3 source code

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

package {
    import flash.events.MouseEvent;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.filters.DropShadowFilter;
    import flash.geom.Point;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.text.TextFormat;
    
    public class FlashTest extends Sprite {
        private var _lines:Sprite;
        private var _bd:BitmapData;
        private var _bmp:Bitmap;
        private var _tf:TextField;
        private var _tfor:TextFormat;
        
        public function FlashTest() {
            _lines = new Sprite();
            _bd = new BitmapData(stage.stageWidth, stage.stageHeight, true);
            _bmp = new Bitmap(_bd);
            _bmp.filters = [new DropShadowFilter()];
            
            addChild(_lines);
            addChild(_bmp);
            
            makeText();            
        }
        
        private function makeText():void
        {
            _tfor = new TextFormat();
            _tfor.size = 190;
            _tfor.font = "Arial Black";
            _tfor.color = 0xffffff;
            
            _tf = new TextField();
            _tf.selectable = false;
            _tf.text = "WDRFL";
            _tf.autoSize = TextFieldAutoSize.LEFT;
            _tf.setTextFormat(_tfor);
            _tf.y = 125;
            
            addChildAt(_tf, 0);
            
            addEventListener(MouseEvent.CLICK, clearScreen);
            addEventListener(Event.ENTER_FRAME, onEnterFrame);
        }
        
        private function clearScreen(e:MouseEvent):void {
            _bd.dispose();
        }
        
        protected function onEnterFrame(e:Event):void
        {
            for(var i:uint=0; i<50; i++) {
                sewText(50);
            }
        }
        
        private function sewText(dist:int):void {
            var distance:int = dist;
            var sewX:Number = Math.random() * stage.stageWidth;
            var sewY:Number = Math.random() * stage.stageHeight;
            var distX:Number = sewX + Math.random() * distance - (distance / 2);
            var distY:Number = sewY + Math.random() * distance - (distance / 2);
            
            if(HitTester.realHitTest(_tf, new Point(sewX, sewY)) && HitTester.realHitTest(_tf, new Point(distX, distY))) {
               _lines.graphics.lineStyle(0, 0, 0.2);
               _lines.graphics.moveTo(sewX, sewY);
               _lines.graphics.lineTo(distX, distY);
               _bd.draw(_lines);
               _lines.graphics.clear(); 
            }
        }
    }
}

import flash.display.BitmapData;
import flash.display.DisplayObject;
import flash.geom.Matrix;
import flash.geom.Point;

class HitTester
{
    public static function realHitTest(object:DisplayObject, point:Point):Boolean
    {
        if(object is BitmapData) {
            return (object as BitmapData).hitTest(new Point(0, 0), 0, object.globalToLocal(point));
        } else {
            if(!object.hitTestPoint(point.x, point.y, true)) {
                return false;
            } else {
                var bmapData:BitmapData = new BitmapData(object.width, object.height, true, 0x00000000);
                bmapData.draw(object, new Matrix());
                
                var returnVal:Boolean = bmapData.hitTest(new Point(0, 0), 0, object.globalToLocal(point));
                bmapData.dispose();
                return returnVal;
            }


        }


    }

}