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

花みたいな細胞みたいな

author : Hado_A
* BitmapDataとかColorTransformとかの勉強をしつつ遊んでいたら、ちょっとヘンテコなものが
* 出来たのでUPしてみます。
* 自分では花が次々に咲いているように見えるのですが、見方によっては「ヘンな細胞が生まれてる…?!」
* みたいに感じるかもしれませんw
* 画面一杯に埋まるとカオスです。
Get Adobe Flash player
by Hado_A 05 Oct 2009
/**
 * Copyright Hado_A ( http://wonderfl.net/user/Hado_A )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/utyp
 */

/*
 * author : Hado_A
 * BitmapDataとかColorTransformとかの勉強をしつつ遊んでいたら、ちょっとヘンテコなものが
 * 出来たのでUPしてみます。
 * 自分では花が次々に咲いているように見えるのですが、見方によっては「ヘンな細胞が生まれてる…?!」
 * みたいに感じるかもしれませんw
 * 画面一杯に埋まるとカオスです。
 */
package
{
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Graphics;
    import flash.display.Sprite;
    import flash.display.BlendMode;
    import flash.events.Event;
    import flash.events.TimerEvent;
    import flash.filters.BevelFilter;
    import flash.geom.ColorTransform;
    import flash.utils.Dictionary;
    import flash.utils.Timer;
    import flash.filters.BitmapFilterQuality;
    import flash.filters.BlurFilter;
    import net.hires.debug.Stats;
    
    [SWF(width=465, height=465, backgroundColor=0x000000, frameRate=60)]

    public class GradationTest1 extends Sprite
    {
        //---------------------------------------------------------------
        // const
        //---------------------------------------------------------------
        
        private static const TIMER_DELAY                :Number     = 1000;
        private static const TIMER_REPEAT               :int        = 0;
        private static const DEFAULT_RADIUS             :Number     = 10;
        private static const PERTICLE_CHANGE_COLOR      :Number     = 0.8;
        private static const PERTICLE_DRAW_SPEED        :Number     = 1.0;
        private static const PERTICLE_SWING_WIDTH       :Number     = 0.24;
        private static const PERTICLE_MAX_SIZE          :Number     = 1.2;
        private static const PERTICLE_INC_SIZE          :Number     = 0.01;
     
        //---------------------------------------------------------------
        // var
        //---------------------------------------------------------------
        
        private var m_timer               :Timer;
        private var m_perticles           :Dictionary;
        private var m_canvas              :BitmapData;
        private var m_blurAry             :Array;
        
        //---------------------------------------------------------------
        // method
        //---------------------------------------------------------------
        
        //---------------------------------------------------------------
        /**
         * コンストラクタ。
         */
        public function GradationTest1()
        {
            m_timer = new Timer(TIMER_DELAY, TIMER_REPEAT);
            m_timer.addEventListener(TimerEvent.TIMER, onTimer);
            m_timer.start();
            
            m_blurAry = new Array();
            m_blurAry.push(new BlurFilter(7, 7, BitmapFilterQuality.LOW));
            
            m_perticles = new Dictionary(true);
            
            m_canvas = new BitmapData(465, 465, true, 0x00000000);
            
            this.addChild(new Bitmap(m_canvas));
            this.addChild(new Stats());
        }
        
        //---------------------------------------------------------------
        // event
        //---------------------------------------------------------------
        
        //---------------------------------------------------------------
        /**
         * (花を形作る)円を描くオブジェクトの毎フレームイベント。
         */
        private function runPerticle(e:Event):void
        {
            var perticle:Perticle = Perticle(e.currentTarget);
            
            // 最大サイズになったら終了
            if (perticle.size > PERTICLE_MAX_SIZE)
            {
                perticle.removeEventListener(Event.ENTER_FRAME, runPerticle);
                m_perticles[perticle] = null;
            }
            
            // 円の描画間隔
            perticle.drawSpeed += PERTICLE_DRAW_SPEED;
            perticle.swingWidth += PERTICLE_SWING_WIDTH;
            
            // スケーリング
            perticle.size += PERTICLE_INC_SIZE;
            perticle.scaleX = perticle.size;
            perticle.scaleY = perticle.size;
            
            // 円の描画位置移動
            perticle.x += (Math.cos(perticle.drawSpeed) * perticle.swingWidth);
            perticle.y += (Math.sin(perticle.drawSpeed) * perticle.swingWidth);
            
            // カラートランスフォーム変更
            perticle.color.redOffset   += perticle.changeColor.redOffset;
            perticle.color.greenOffset += perticle.changeColor.greenOffset;
            perticle.color.blueOffset  += perticle.changeColor.blueOffset;
            perticle.transform.colorTransform = perticle.color; // セット
            
            // 描画
            m_canvas.draw(perticle, perticle.transform.matrix, perticle.transform.colorTransform, BlendMode.HARDLIGHT);
        }
        
        //---------------------------------------------------------------
        /**
         * 一定間隔で円(花を形づくるもの)を新規作成。
         */
        private function onTimer(e:TimerEvent):void
        {
            var perticle:Perticle = new Perticle();
            perticle.x = Math.random() * stage.stageWidth;
            perticle.y = Math.random() * stage.stageHeight;
            perticle.filters = m_blurAry;
            
            var radius:Number = DEFAULT_RADIUS;
            
            // 色初期化
            perticle.color = initReflectColor(); // 描画色
            perticle.changeColor  = initChangeColor(perticle.color); // 描画色を変化させる色
            
            // 円を描画
            var g:Graphics = perticle.graphics;
            g.beginFill(0x000000);
            g.drawCircle(0, 0, radius);
            g.endFill();
            
            // 毎フレームイベントを設定
            perticle.addEventListener(Event.ENTER_FRAME, runPerticle);
            m_perticles[perticle] = perticle;
        }
        
        //---------------------------------------------------------------
        /**
         * 描画色を初期化。
         */
        private function initReflectColor():ColorTransform
        {
            var color:ColorTransform = new ColorTransform();
            
            color.redOffset   = Math.random() * 255;
            color.greenOffset = Math.random() * 255;
            color.blueOffset  = Math.random() * 255;
            
            return color;
        }
        
        //---------------------------------------------------------------
        /**
         * 描画色を変化させる色を初期化。
         */
        private function initChangeColor(color:ColorTransform):ColorTransform
        {
            var cc:ColorTransform = new ColorTransform();
            
            // 赤変化方向・量
            if (color.redOffset < 127.5) { cc.redOffset = PERTICLE_CHANGE_COLOR; }
            else { cc.redOffset = -PERTICLE_CHANGE_COLOR; }
            
            // 緑変化方向・量
            if (color.greenOffset < 127.5) { cc.greenOffset = PERTICLE_CHANGE_COLOR; }
            else { cc.greenOffset = -PERTICLE_CHANGE_COLOR; }
            
            // 青変化方向・量
            if (color.blueOffset < 127.5) { cc.blueOffset = PERTICLE_CHANGE_COLOR; }
            else { cc.blueOffset = -PERTICLE_CHANGE_COLOR; }
            
            return cc;
        }
        
    }
}

//---------------------------------------------------------------
// Perticleクラス
//---------------------------------------------------------------
import flash.display.Sprite
import flash.geom.ColorTransform;

class Perticle extends Sprite
{
    public var drawSpeed:Number;
    public var swingWidth:Number;
    public var size:Number;
    public var color:ColorTransform;
    public var changeColor:ColorTransform;
    
    public function Perticle()
    {
        drawSpeed = 0;
        swingWidth = 0;
        size = 0;
        color = new ColorTransform();
        changeColor = new ColorTransform();
    }
}