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: な~るほど ザ!ワ…

...
@author katapad
@version 0.2
@since 2008/12/23 23:55
// forked from midisheep's forked from: な~るほど ザ!ワ…
// forked from katapad's な~るほど ザ!ワ…
// forked from katapad's おまえの母ちゃん…
package  
{
    import caurina.transitions.Tweener;
    import flash.display.*;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.filters.BlurFilter;
    import flash.geom.Matrix;
    import flash.geom.Point;
    import flash.geom.Rectangle;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.text.TextFormat;
    
    [SWF(width="465", height="465", backgroundColor="0x000000", frameRate="60")]
    /**
     * ...
     * @author katapad
     * @version 0.2
     * @since 2008/12/23 23:55
     */
    public class LEDSignMainNaruhodo extends Sprite 
    {
        
        //----------------------------------
        //  static var/const
        //----------------------------------
        public static const DEBUG_MOODE:Boolean = true;
        //public static const DEBUG_MOODE:Boolean = false;
        public static const STAGE_WIDTH:uint = 465;
        public static const STAGE_HEIGHT:uint = 465;
        
        public static const LED_CONTAINER_WIDTH:uint = 464;
        public static const LED_CONTAINER_HEIGHT:uint = 464;
        
        public static const LED_MARGIN:uint = 2;
        public static const LED_RADIUS:uint = 3;
        
        public static const ROWS:uint = 15;
        
        public static const ANIMATION_SPEED:Number = 0.02;
        private static const DEFAULT_TEXTFORMAT:TextFormat = new TextFormat("_等幅", 12, 0xFFFFFF, false);
        //----------------------------------
        //  instance var 
        //----------------------------------
        private var _ledContainer:Sprite;
        private var _ledList:Array;
        private var _canvas:Sprite;
        private var _canvasDrawBM:BitmapData;
        private var _resetBMRect:Rectangle;
        private var _drawMatrix:Matrix = new Matrix();
        private var _tfList:/*TextField*/Array;
        private var _square:Shape;
        
        private var _words:Array = ["You Won<<<"];
        
        private var _cols:uint;
        
        public function LEDSignMainNaruhodo() 
        {
            init();
            updateOn();
            animationStart();
        }
        
        private function init():void 
        {
            _cols = Math.floor((LED_CONTAINER_WIDTH - 2 * LED_MARGIN) / (LED_RADIUS * 2 /*+ LED.OFF_GLOW_FILTER.blurX */+ LED_MARGIN))
            _resetBMRect = new Rectangle(0, 0, _cols, ROWS);
            initStage();
            initLEDs();
            initCanvas();
        }
        
        private function initCanvas():void
        {
            _canvas = new Sprite();
            _canvasDrawBM = new BitmapData(_cols, ROWS, true, 0x000000);
            _drawMatrix.translate(0, -2);
            createText();
            createSquare();
            
            _ledContainer.y = stage.stageHeight * 0.5 - _ledContainer.height * 0.5 ;

            //デバッグ確認用
            if (DEBUG_MOODE)
            {
                addChild(_canvas);
                _canvas.y = 420;
                var bm:Bitmap = new Bitmap(_canvasDrawBM);
                addChild(bm);
                bm.y = 300;
            }
        }
        
        private function createSquare():void
        {
            _square = new Shape();
            _square.y = 2;
            _canvas.addChild(_square);
            _square.graphics.beginFill(0xFFFFFF, 1.0);
            _square.graphics.drawRect(0, 0, _cols, ROWS);
            _square.graphics.endFill();
            _square.blendMode = BlendMode.INVERT;
        }
        
        private function createText():void
        {
            _tfList = [];
            for (var i:int = 0, n:int = _words.length; i < n; i++) 
            {
                var tf:TextField = _canvas.addChild(new TextField()) as TextField;
                tf.defaultTextFormat = DEFAULT_TEXTFORMAT;
                tf.autoSize = TextFieldAutoSize.LEFT;
                tf.text = _words[i];
                tf.y = 2;
                
                _tfList[i] = tf;
            }
        }
        
        private function initStage():void
        {
            //stage.align = StageAlign.TOP_LEFT;
            //stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.quality = StageQuality.HIGH;
            var stageBg:Shape = addChild(new Shape()) as Shape;
            stageBg.graphics.lineStyle(1, 0xcccccc);
            stageBg.graphics.drawRect(0, 0, STAGE_WIDTH, STAGE_HEIGHT);
        }
        
        private function initLEDs():void
        {
            _ledList = [];
            _ledContainer = new Sprite();
            addChild(_ledContainer); 
            
            var space:uint = LED_RADIUS * 2/* + LED.OFF_GLOW_FILTER.blurX*/ + LED_MARGIN;
            
            for (var i:int = 0; i < ROWS * _cols; i++) 
            {
                var led:LED = _ledContainer.addChild(LEDFactory.create(LED_RADIUS)) as LED;
                led.x = (i % _cols) * space + LED_MARGIN;
                led.y = Math.floor(i / _cols) * space + space;
                _ledList[i] = led;
            }
        }
        
        private function updateOn():void
        {
            addEventListener(Event.ENTER_FRAME, update);
        }
        
        private function update(event:Event):void
        {
            render();
        }
        
        private function render():void 
        {
            _canvasDrawBM.fillRect(_resetBMRect, 0);
            _canvasDrawBM.draw(_canvas, _drawMatrix);
            _canvasDrawBM.threshold(_canvasDrawBM, _canvasDrawBM.rect, new Point(), "<", 0x808080, 0);
            
            for (var i:int = 0, n:int = _ledList.length; i < n; i++) 
            {
                var color:uint = _canvasDrawBM.getPixel((i % _cols), Math.floor(i / _cols));
                if (color == 0)
                    LED(_ledList[i]).lightOn()
                else
                    LED(_ledList[i]).lightOff()
            }
        }
        
        /**
         * アニメーション
         */
        private function animationStart():void
        {
            initPos();
            var delayTime:Number = 0;
            var animTime:Number;
            var speed:Number = ANIMATION_SPEED;
            for (var i:int = 0, n:int = _tfList.length; i < n; i++) 
            {
                var tf:TextField = _tfList[i];
                animTime = LEDAnimation.getTFAnimTime(tf.x, -tf.textWidth - 1, speed);
                //フリ
                if (i != n -1)
                {
                    delayTime = LEDAnimation.slide(tf, -tf.textWidth - 2, delayTime, animTime);
                }
                //オチ
                else
                {
                    delayTime -= 0.8;
                    var cx:Number = Math.round((_cols - tf.textWidth) * 0.5);
                    animTime = LEDAnimation.getTFAnimTime(tf.x, -cx - 1, speed);
                    delayTime = LEDAnimation.slide(tf, cx, delayTime, animTime);
                    delayTime += 1.0;
                    for (var j:int = 0; j < 4; j++) 
                    {
                        delayTime = LEDAnimation.blink(_square, delayTime);
                    }
                    delayTime = LEDAnimation.slide(tf, -tf.textWidth - 2, delayTime + 0.5, LEDAnimation.getTFAnimTime(cx, -tf.textWidth - 1, speed));
                }
            }
            Tweener.addCaller(this, { time: 0.0, delay: delayTime + 2.0, count: 1, onUpdate: animationStart } );
        }
        
        private function initPos():void
        {
            _square.visible = false;
            for (var i:int = 0, n:int = _tfList.length; i < n; i++) 
            {
                _tfList[i].x = _cols * 1.5;
            }
        }
    }
}
import caurina.transitions.Tweener;

class LEDAnimation
{
    function LEDAnimation()
    {
        
    }
    
    public static function blink(target:DisplayObject, delayTime:Number, blinkTime:Number = 0.2):Number
    {
        Tweener.addTween(target, { visible: true, time: 0.0, delay: delayTime += blinkTime, transition: "linear" } );
        Tweener.addTween(target, { visible: false, time: 0.0, delay: delayTime += blinkTime, transition: "linear" } );
        return delayTime;
    }
    
    public static function slide(target:DisplayObject, destX:Number, delayTime:Number, animTime:Number):Number
    {
        Tweener.addTween(target, { x: destX, time: animTime, delay: delayTime, transition: "linear" } );
        return delayTime + animTime;
    }
    public static function getTFAnimTime(startX:Number, destX:Number, friction:Number = 0.1):Number
    {
        return Math.abs((startX - destX) * friction);
    }
    
}
import flash.display.*;
import flash.filters.BlurFilter;
import flash.filters.GlowFilter;
import flash.geom.ColorTransform;
import flash.geom.Matrix;
class LED extends Bitmap
{
    
    public static const ON_COLOR:uint = 0xE9C20E;
    public static const OFF_COLOR:uint = 0x454221;
    public static const ON_GLOW_FILTER:GlowFilter = new GlowFilter(ON_COLOR, 1.0, 4, 4, 1, 2);
    public static const ON_INNER_GLOW_FILTER:GlowFilter = new GlowFilter(0xFFFFFF, 0.8, 4, 4, 1, 2, true);
    public static const ON_COLOR_FILTER:ColorTransform = new ColorTransform(0, 0, 0, 1.0, 69, 66, 33);
    public static const OFF_GLOW_FILTER:GlowFilter = new GlowFilter(OFF_COLOR, 1.0, 4, 4, 1, 2);
    public static const OFF_INNER_GLOW_FILTER:GlowFilter = new GlowFilter(0xFFFFFF, 0.5, 2, 2, 1, 2, true);
    public static const OFF_COLOR_FILTER:ColorTransform = new ColorTransform();
    
    private static var _onBM:BitmapData;
    private static var _offBM:BitmapData;
    
    public function LED()
    {
        init();
    }
    
    private function init():void
    {
        this.bitmapData = LED._offBM;
    }
    
    public function lightOn():void
    {
        this.bitmapData = LED._onBM;
    }
    
    public function lightOff():void
    {
        this.bitmapData = LED._offBM;
    }
    
    public static function set onBM(value:BitmapData):void 
    {
        _onBM = value;
    }
    
    public static function set offBM(value:BitmapData):void 
    {
        _offBM = value;
    }
    
}

class LEDFactory
{
    
    private static var _isCached:Boolean = false;
    public function LEDFactory(){}
    
    public static function create(radius:Number = 5):LED
    {
        if (!_isCached)
        {
            initCache(radius);
        }
        return new LED();
        
    }
    
    private static function initCache(radius:Number):void
    {
        LED.onBM = createBM(radius, LED.ON_COLOR, [LED.ON_GLOW_FILTER, LED.ON_INNER_GLOW_FILTER], LED.ON_COLOR_FILTER);
        LED.offBM =  createBM(radius, LED.OFF_COLOR, [LED.OFF_GLOW_FILTER, LED.OFF_INNER_GLOW_FILTER], LED.OFF_COLOR_FILTER);
        _isCached = true;
    }
    
    private static function createBM(radius:Number, color:uint, filters:Array, colortrans:ColorTransform):BitmapData
    {
        var shape:Shape = new Shape();
        shape.graphics.beginFill(color);
        shape.graphics.drawCircle(radius, radius, radius);
        shape.graphics.endFill();
        shape.filters = filters;
        shape.transform.colorTransform = colortrans;
        
        var result:BitmapData =  new BitmapData(shape.width + 4, shape.height + 4, true, 0x000000);
        var mtx:Matrix = new Matrix();
        mtx.translate(2, 2);
        result.draw(shape, mtx);
        return result;
    }
}