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

forked from: forked from: forked from: forked from: forked from: wonderfl KeyVisual V.4.ja

-- welcome to wonderfl --
wonderflとは、
ブラウザのみでFlashをつくることのできるサービス
サイトにあるフォームにActionscript3のコードを書き、
サーバサイドでコンパイルを行います。
コンパイル結果がページ上に自動的に表示されるので、
完成したFlashをリアルタイムに見ながらコードを書くことができます。
まずは、Fork ボタンをクリックして、このソースを改造してみよう。
Get Adobe Flash player
by hacker_o5nv66b6 26 Sep 2009
// forked from hacker_o5nv66b6's forked from: forked from: forked from: forked from: wonderfl KeyVisual V.4.ja
// forked from hacker_o5nv66b6's forked from: forked from: forked from: wonderfl KeyVisual V.4.ja
// forked from hacker_o5nv66b6's forked from: forked from: wonderfl KeyVisual V.4.ja
// forked from hacker_o5nv66b6's forked from: wonderfl KeyVisual V.4.ja
// forked from mash's wonderfl KeyVisual V.4.ja
//
//              -- welcome to wonderfl --
//
// wonderflとは、
//         ブラウザのみでFlashをつくることのできるサービス
//
// サイトにあるフォームにActionscript3のコードを書き、
// サーバサイドでコンパイルを行います。
// コンパイル結果がページ上に自動的に表示されるので、
// 完成したFlashをリアルタイムに見ながらコードを書くことができます。
//
// まずは、Fork ボタンをクリックして、このソースを改造してみよう。
//
package {
    import flash.display.Bitmap; 
    import flash.display.BitmapData; 
    import flash.display.BlendMode; 
    import flash.filters.BlurFilter; 
    import flash.events.Event; 
    import flash.events.MouseEvent; 
    import flash.display.Sprite; 
    import flash.geom.ColorTransform; 
    import flash.geom.Rectangle; 
    import flash.geom.Point; 
    import org.libspark.betweenas3.easing.*; 
    import com.flashdynamix.utils.SWFProfiler; 
     
    public class CliffordAttractorDynamic extends Sprite 
    { 
        //---------------------------------------- 
        //CLASS CONSTANTS 
         
        //パーティクル数 
        private const N:uint = 15000; 
         
        private const W:uint = 465; 
        private const H:uint = 465; 
         
        private const W1_2:uint = uint(W / 2); 
        private const H1_2:uint = uint(H / 2); 
         
        private const RECT:Rectangle = new Rectangle(0, 0, W, H); 
        private const ZEROS:Point = new Point(0, 0); 
         
         
         
         
         
        //---------------------------------------- 
        //VARIABLES 
         
        private var _a:Number; 
        private var _b:Number; 
        private var _c:Number; 
        private var _d:Number; 
         
        private var _va:Number; 
        private var _vb:Number; 
        private var _vc:Number; 
        private var _vd:Number; 
         
        private var _head:Particle; 
         
        private var _canvas:BitmapData; 
        private var _buffer:BitmapData; 
         
        private var _blurFilter:BlurFilter; 
        private var _colorTransForm:ColorTransform; 
         
        private var _gradation:Gradation; 
         
         
         
         
         
        //-------------------------------------------------- 
        //METHODS 
         
        public function CliffordAttractorDynamic():void 
        { 
            Wonderfl.disable_capture(); 
             
            addChild(new Bitmap(_canvas = new BitmapData(W, H, false, 0x000000))); 
            _buffer = _canvas.clone(); 
             
            _gradation = new Gradation(0xcc0000, 0xcc6000, 0xcccc00, 0x00cc00, 0x00cccc, 0x0000cc, 0x6000cc); 
            _gradation.setEasing(Linear.easeNone); 
             
            _blurFilter = new BlurFilter(4, 4, 4); 
            _colorTransForm = new ColorTransform(0.95, 0.975, 1); 
             
            var o:Particle = _head = new Particle(); 
            for (var i:uint = 0; i < N; ++i) 
            { 
                o = o.next = new Particle(); 
            } 
             
            addEventListener(Event.ENTER_FRAME, _update); 
            stage.addEventListener(MouseEvent.CLICK, _reset); 
             
            SWFProfiler.init(this); 
             
            _reset(); 
        } 
         
        private function _reset(e:MouseEvent = null):void 
        { 
            _a = (Math.random() - 0.5) * 3; 
            _b = (Math.random() - 0.5) * 3; 
            _c = (Math.random() - 0.5) * 6; 
            _d = (Math.random() - 0.5) * 6; 
            if (Math.abs(_a) < 0.4) _a += 0.8 * _a / Math.abs(_a); 
            if (Math.abs(_b) < 0.4) _b += 0.8 * _b / Math.abs(_b); 
            if (Math.abs(_c) < 1.0) _c += 1.0 * _c / Math.abs(_c); 
            if (Math.abs(_d) < 1.0) _d += 1.0 * _d / Math.abs(_d); 
             
            _va = 0.010; 
            _vb = 0.008; 
            _vc = 0.006; 
            _vd = 0.004; 
             
            var p:Particle = _head; 
            do { 
                p.x1 = p.x0 = (Math.random() - 0.5) * 2; 
                p.y1 = p.y0 = (Math.random() - 0.5) * 2; 
            } 
            while (p = p.next); 
        } 
         
        private function _update(e:Event):void 
        { 
            var p:Particle = _head, 
                vx:Number, 
                vy:Number; 
             
            _buffer.lock(); 
            _buffer.fillRect(RECT, 0x000000); 
            do { 
                p.x1 = Math.sin(_a * p.y0) + _c * Math.cos(_a * p.x0) + Math.random() * 0.001; 
                p.y1 = Math.sin(_b * p.x0) + _d * Math.cos(_b * p.y0) + Math.random() * 0.001; 
                 
                vx = p.x1 - p.x0; 
                vy = p.y1 - p.y0; 
                 
                p.x0 = p.x1; 
                p.y0 = p.y1; 
                 
                _buffer.setPixel(W1_2 + p.x1 * 70, H1_2 + p.y1 * 70, _gradation.getColor((vx * vx + vy * vy) * 0.05) ); 
            } 
            while (p = p.next); 
            _buffer.unlock(); 
             
            _canvas.lock(); 
            _canvas.colorTransform(RECT, _colorTransForm); 
            _canvas.applyFilter(_canvas, RECT, ZEROS, _blurFilter); 
            _canvas.draw(_buffer, null, null, BlendMode.SCREEN); 
            _canvas.unlock(); 
             
            if (_a < -3.0 || _a > 3.0) _va *= -1; 
            if (_b < -3.0 || _b > 3.0) _vb *= -1; 
            if (_c < -3.0 || _c > 3.0) _vc *= -1; 
            if (_d < -3.0 || _d > 3.0) _vd *= -1; 
            _a += _va; 
            _b += _vb; 
            _c += _vc; 
            _d += _vd; 
        } 
    } 
} 


//-------------------------------------------------- 
//1ファイル内にクラスを3つ以上作成するとCS4でビルドできなくなるバグ対策クラス 
internal class EmptyClass { } 


//-------------------------------------------------- 
//パーティクル 
internal class Particle extends EmptyClass 
{ 
    public var x1:Number; 
    public var y1:Number; 
    public var x0:Number; 
    public var y0:Number; 
    public var next:Particle; 
} 


//-------------------------------------------------- 
/** 
 * @author saqoosha 
 * @see http://wonderfl.net/code/7ed2d650b9d513edf9a499fb704c19ecb7aa4694 
 */ 
import frocessing.color.ColorLerp; 
import org.libspark.betweenas3.core.easing.IEasing; 
import org.libspark.betweenas3.easing.Linear; 
class Gradation extends EmptyClass 
{ 
    private var _colors:Array; 
    private var _easing:IEasing; 
     
    public function Gradation(...args):void 
    { 
        _colors = args.concat(); 
        _easing = Linear.linear; 
    } 
     
    public function setEasing(easing:IEasing):void 
    { 
        _easing = easing; 
    } 
     
    public function getColor(position:Number):uint 
    { 
        position = (position < 0 ? 0 : position > 1 ? 1 : position) * (_colors.length - 1); 
        var idx:int = position; 
        var alpha:Number = _easing.calculate(position - idx, 0, 1, 1); 
        if (alpha == 0) 
        { 
            return _colors[idx]; 
        } 
        else 
        { 
            return ColorLerp.lerp(_colors[idx], _colors[idx + 1], alpha); 
        } 
    } 
}