In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

flash on 2011-2-23

Get Adobe Flash player
by alambertsimon 23 Feb 2011
    Embed
/**
 * Copyright alambertsimon ( http://wonderfl.net/user/alambertsimon )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/i7xt
 */

package {
    import flash.display.Sprite;
    import flash.display.DisplayObject;
    import flash.geom.Point;
    import flash.events.MouseEvent;
    import flash.events.Event;
    public class FlashTest extends Sprite {
        private var _container:Sprite = new Sprite();
        private var isPress:Boolean;
        
        public function FlashTest() {
            graphics.beginFill(0);
            graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);

            var _pointArray:Array = [
                new Point( 0 , 0 ),
                new Point( 265 , 0 ),
                new Point( 265 , 265 ),
                new Point( 0 , 265 )
            ];
            addChild( _container );
            
            stage.addEventListener( MouseEvent.MOUSE_DOWN, function ():void 
            {
                isPress = true;
                while (_container.numChildren) _container.removeChildAt(0);
                
                var _sliceObj:LineSliceObject = new LineSliceObject( stage , _pointArray ,
                (Math.random() * 0x99 + 0x66) << 16 | 
                (Math.random() * 0x99 + 0x66) << 8 | 
                (Math.random() * 0x99 + 0x66)
                );
                _sliceObj.x = _sliceObj.y = 100;
                _container.addChild( _sliceObj );
                
                if (!isPress) return;

                var t1:Number = Math.random() * Math.PI
                var t2:Number = t1 + Math.random() * (Math.PI * 2 / 3) + Math.PI * 1 / 3;
                
                var Pt1:Point = Point.polar(300, t1).add(new Point(stage.stageWidth/2, stage.stageHeight / 2)); 
                var Pt2:Point = Point.polar(300, t2).add(new Point(stage.stageWidth/2, stage.stageHeight / 2)); 
                var lsos:Array = [];
                var child:DisplayObject = _container.getChildAt(0);
                    if(child is LineSliceObject && LineSliceObject(child)._area >= 30){
                        lsos.push(child);
                    }
                    for each(var lso:LineSliceObject in lsos){
                        lso.slice(Pt1, Pt2);
                    }
            });
            /*addEventListener(Event.ENTER_FRAME, function ():void 
            {
                if (!isPress) return;

                var t1:Number = Math.random()*3//Math.random() * Math.PI * 2;
                var t2:Number = t1+Math.random()*3//t1 + Math.random() * (Math.PI * 2 / 3) + Math.PI * 1 / 3;
                
                var Pt1:Point = Point.polar(300, t1).add(new Point(stage.stageWidth/2, stage.stageHeight / 2)); 
                var Pt2:Point = Point.polar(300, t2).add(new Point(stage.stageWidth/2, stage.stageHeight / 2)); 
                var lsos:Array = [];
                var child:DisplayObject = _container.getChildAt(0);
                    if(child is LineSliceObject && LineSliceObject(child)._area >= 30){
                        lsos.push(child);
                    }
                    for each(var lso:LineSliceObject in lsos){
                        lso.slice(Pt1, Pt2);
                    }
               /* for (var i:int = 0; i < _container.numChildren; i++)
                {
                    var child:DisplayObject = _container.getChildAt(i);
                    if(child is LineSliceObject && LineSliceObject(child)._area >= 30){
                        lsos.push(child);
                    }
                }
                
                for each(var lso:LineSliceObject in lsos){
                    lso.slice(Pt1, Pt2);
                }
            });*/
        }
    }
}

import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.display.Shape
import flash.events.Event;
import flash.display.Stage;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.events.MouseEvent;
import flash.display.Graphics;
import org.libspark.betweenas3.BetweenAS3;
import org.libspark.betweenas3.easing.*;

class LineSliceObject extends Sprite
{
    private var _stage:Stage;
    private var _pointArray:Array;
    private var _color:uint;
    private var _point1:Point;
    private var _point2:Point;
    private var _length:int;
        public var _area:Number;
    
    public function LineSliceObject( _stage:Stage , _pointArray:Array , _color:uint ) 
    {
        this._stage = _stage;
        this._pointArray = _pointArray;
        this._color = _color;
//                this._area = areaFast(_pointArray);
        drawRectFromPoint( this , _pointArray , _color );
                this._area = areaFast(this);
    }

    
    /*
     * ------------------------------------------------------------
     * Graphic描画
     * ------------------------------------------------------------
    */
    private function drawRectFromPoint( _target:* , _pointArray:Array , _color:uint ):void
    {
        _target.graphics.beginFill( _color , 1.0 );
        _target.graphics.moveTo( _pointArray[ 0 ].x , _pointArray[ 0 ].y );
        _length = _pointArray.length;
        for ( var i:int = 1; i < _length; i ++ )
        {
            var _point:Point = _pointArray[ i ];
            _target.graphics.lineTo( _point.x , _point.y );
        }
        _target.graphics.endFill();
    }

        private static function areaFast(_target:DisplayObject) : Number
        {
            var r:Rectangle = _target.getRect(_target);
            return _target.width * _target.height;
        }
    
    /*
     * ------------------------------------------------------------
     * スライス
     * ------------------------------------------------------------
    */
    public function slice( _point1:Point , _point2:Point ):void
    {
        var _pt1:Point = globalToLocal( _point1 );
        var _pt2:Point = globalToLocal( _point2 );
        var _newPointArray:Array = [[], []];
        var _numCross:int = 0;
        
        for ( var i:int = 0; i < _length ; i ++ ) 
        {
            var _pt3:Point = _pointArray[ i ];
            var _pt4:Point = ( _pointArray[ i + 1 ] ) ? _pointArray[ i + 1 ] : _pointArray[ 0 ];
            var _crossPt:Point = crossPoint( _pt1 , _pt2 , _pt3 , _pt4 );
            
            _newPointArray[ 0 ].push( _pt3 );
            if ( _crossPt )
            {
                _newPointArray[ 0 ].push( _crossPt );
                _newPointArray[ 1 ].push( _crossPt );
                _newPointArray.reverse();
                _numCross ++;
            }
        }
        if ( _numCross == 2 )
        {
            var _newObj1:LineSliceObject = new LineSliceObject( _stage , _newPointArray[ 0 ] , _color );
            var _newObj2:LineSliceObject = new LineSliceObject( _stage , _newPointArray[ 1 ] , Math.random() * 0xFFFF00 );
            _newObj1.x = _newObj2.x = this.x;
            _newObj1.y = _newObj2.y = this.y;
            parent.addChild( _newObj1 );
            parent.addChild( _newObj2 );
            parent.removeChild( this );

            var _vector:Point = _pt2.subtract( _pt1 );
            var _force:int = 6 * Math.random() * 20;
                        var _d:Number = Math.sqrt(_vector.x * _vector.x + _vector.y * _vector.y);
                        var _fx:Number = (_vector.x >= 0 ? _vector.x : -_vector.x) / _d;
                        var _fy:Number = (_vector.y >= 0 ? _vector.y : -_vector.y) / _d;
            var _fx1:Number = ( _newPointArray[0][0].x < _newPointArray[1][0].x ) ? -_fx : _fx;
            var _fx2:Number = ( _newPointArray[1][0].x < _newPointArray[0][0].x ) ? -_fx : _fx;
            var _fy1:Number = ( _newPointArray[0][0].y < _newPointArray[1][0].y ) ? -_fy : _fy;
            var _fy2:Number = ( _newPointArray[1][0].y < _newPointArray[0][0].y ) ? -_fy : _fy;
            
            BetweenAS3.tween( _newObj1 , { x : _newObj1.x + _fx1 * _force , y : _newObj1.y + _fy1 * _force} , null, Math.random()*4+2, Expo.easeOut ).play();
            BetweenAS3.tween( _newObj2 , { x : _newObj2.x + _fx2 * _force , y : _newObj2.y + _fy2 * _force} , null, Math.random()*4+2, Expo.easeOut ).play();
        }
//        else _stage.addEventListener( MouseEvent.MOUSE_DOWN , mouseDownHandler );
    }
    
    /*
     * ------------------------------------------------------------
     * 交点を割り出す
     * ------------------------------------------------------------
    */
    private function crossPoint( _pt1:Point , _pt2:Point , _pt3:Point , _pt4:Point ):Point
    {    
        var _vector1:Point = _pt2.subtract( _pt1 );
        var _vector2:Point = _pt4.subtract( _pt3 );
        
                var c21:Number = cross(_vector2, _vector1);
        if ( c21 == 0.0) return null;
        
        var _s:Number = cross( _vector2 , _pt3.subtract( _pt1) ) / c21;

        if ( isCross( _s ))
        {
                    var _t:Number = cross( _vector1, _pt1.subtract( _pt3 ) ) / cross( _vector1, _vector2 );
                        if(isCross(_t)){
                    _vector1.x *= _s;
                _vector1.y *= _s;
                return _pt1.add( _vector1 );
                        }
        }
        return null;
    }
        
    private function cross( _vector1:Point , _vector2:Point ):Number
    {
        return ( _vector1.x * _vector2.y - _vector1.y * _vector2.x );
    }
    
    public static function isCross( _n:Number ):Boolean
    {
        return ( ( 0 <= _n ) && ( _n <= 1) );
    }
}