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 2010-3-19

http://wonderfl.net/code/3375aa0f7d17b814c3225fb8eb2ed61c20abf3a8
こないだの奴の逆方向バージョン。
ですが、カーブをカーブらしくしたら何かつまんなくなりました…
Get Adobe Flash player
by matacat 19 Mar 2010
/**
 * Copyright matacat ( http://wonderfl.net/user/matacat )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/3H2J
 */

//    http://wonderfl.net/code/3375aa0f7d17b814c3225fb8eb2ed61c20abf3a8
//  こないだの奴の逆方向バージョン。
//  ですが、カーブをカーブらしくしたら何かつまんなくなりました…

package
{
    import flash.display.Sprite;
    import flash.events.Event;
    
    public class hoge extends Sprite
    {
        private var depth:int = 25;
        
        public function hoge()
        {
            x = fuga.wz = stage.stageWidth / 2;
            y = fuga.hi = stage.stageHeight / 2;
            
            var foo:Vector.<fuga> = new Vector.<fuga>();
            
            for (var i:int = 0; i < depth; i++) addChildAt(foo[i] = new fuga(), 0);
            for (i = depth - 1; i > 0; i--) foo[i - 1].back = foo[i];
            
            var cnt:int = 0;
            var color:uint;
            
            addEventListener(Event.ENTER_FRAME, function(e:Event):void
            {
                color = hsv2rgb(cnt % 360, 0.4 - 0.3 * (cnt % 40 / 40), 0.8 + 0.2 * (cnt % 40 / 40));
                graphics.clear();
                graphics.beginFill(color);
                graphics.drawRect( -x, -y, x * 2, y * 2);
                fuga.bgc = color;
                cnt++;
            });
        }
        
        
        private function hsv2rgb(h:Number, s:Number, v:Number):uint
        {
            s = s > 1 ? 1 : (s < 0 ? 0 : s);
            v = v > 1 ? 1 : (v < 0 ? 0 : v);
            
            if (s == 0) return v * 0xFF << 16 | v * 0xFF << 8 | v * 0xFF << 0;
            
            h = h >= 360 ? h % 360 : (h < 0 ? h % 360 + 360 : h);
            
            var i:int = int(h / 60);
            var f:Number = h / 60 - i;
            var p:Number = v * (1 - s);
            var q:Number = v * (1 - s * f);
            var t:Number = v * (1 - s * (1 - f));
            
            switch (i) {
                case 0: return v * 0xFF << 16 | t * 0xFF << 8 | p * 0xFF << 0;
                case 1: return q * 0xFF << 16 | v * 0xFF << 8 | p * 0xFF << 0;
                case 2: return p * 0xFF << 16 | v * 0xFF << 8 | t * 0xFF << 0;
                case 3: return p * 0xFF << 16 | q * 0xFF << 8 | v * 0xFF << 0;
                case 4: return t * 0xFF << 16 | p * 0xFF << 8 | v * 0xFF << 0;
                case 5: return v * 0xFF << 16 | p * 0xFF << 8 | q * 0xFF << 0;
            }
            
            return 0;
        }
    }
}


import flash.display.Shape;
import flash.events.Event;
import flash.geom.ColorTransform;

class fuga extends Shape
{
    private static const MULTIPLE:Number = 0.9;
    private static const COMMANDS:Vector.<int> = Vector.<int>([1, 2, 2, 2, 2, 2, 2, 2, 2, 2]);
    
    public static var wz:Number;
    public static var hi:Number;
    public static var bgc:uint = 0;
    
    private static var scale:Number = 1;
    
    public var back:fuga;
    public var dx:Number;
    public var dy:Number;
    public var rotate:Number;
    public var color:uint;
    
    private var path:Vector.<Number>;
    private var mw:Number;
    private var mh:Number;
    private var clr:Function = graphics.clear;
    private var fil:Function = graphics.beginFill;
    private var drw:Function = graphics.drawPath;
    
    
    public function fuga()
    {
        scale *= MULTIPLE;
        var ix:Number = wz * scale;
        var iy:Number = hi * scale;
        var ox:Number = (wz * 2 - ix) * 1.4;
        var oy:Number = (hi * 2 - iy) * 1.4;
        
        path = Vector.<Number>([
             ix,  iy,
            -ix,  iy,
            -ix, -iy,
             ix, -iy,
             ox, -oy,
            -ox, -oy,
            -ox,  oy,
             ox,  oy,
             ox, -oy,
             ix, -iy
        ]);
        
        mw = wz - ix;
        mh = hi - iy;
        
        addEventListener(Event.ADDED_TO_STAGE, a2s);
    }
    
    
    private function a2s(e:Event):void
    {
        removeEventListener(Event.ADDED_TO_STAGE, a2s);
        
        dx    = 0;
        dy    = 0;
        color = bgc;
        
        addEventListener(Event.ENTER_FRAME, update);
    }
    
    
    private function update(e:Event):void
    {
        clr();
        fil(color);
        drw(COMMANDS, path);
        
        x        = dx * mw;
        y        = dy * mh;
        rotation = rotate;
        
        if (back) {
            dx        = back.dx * MULTIPLE;
            dy        = back.dy * MULTIPLE;
            rotate    = back.rotate * MULTIPLE;
            var r:int = (back.color >> 16 & 0xFF) - 8;
            var g:int = (back.color >>  8 & 0xFF) - 8;
            var b:int = (back.color       & 0xFF) - 8;
            color     = (r < 0 ? 0 : r) << 16 | (g < 0 ? 0 : g) << 8 | (b < 0 ? 0 : b);
        } else {
            dx     = stage.mouseX / wz - 1;
            dy     = stage.mouseY / hi - 1;
            rotate = dx * dy * 20;
            color  = bgc;
        }
    }
}