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: Enter the world of ... (あなたがiPadを購入すべきでない唯一の理由)

-------------------------------------------------------------------
やっぱり怖いですよね。

[inspired by]
某Pad
http://wonderfl.net/code/63331dcac2f468ad4da986160bc91d39945e6211
-------------------------------------------------------------------

真ん中が透過な画像なら多分何でもいけます
assets.wonderfl.net/images/related_images/a/a2/a235/a23539b3cebd3c86ed745a2ae2afae32bfa32bfc";
入れ子にする画像数
X座標位置の補正値
Y座標位置の補正値
初期拡大率
拡大率の係数
拡大率の限界値
拡大率の増加量
最大の拡大率の画像が、限界値を超えていたら(完全に画面外に出ていたら)
拡大率を最小にして、最奥へ再配置する
package {
/**
 * Copyright Sdkfz251HongKong ( http://wonderfl.net/user/Sdkfz251HongKong )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/op68
 */

// forked from o8que's Enter the world of ... (あなたがiPadを購入すべきでない唯一の理由)
/* -------------------------------------------------------------------
 * やっぱり怖いですよね。
 * 
 * [inspired by]
 * 某Pad
 * http://wonderfl.net/code/63331dcac2f468ad4da986160bc91d39945e6211
 * -------------------------------------------------------------------
 */

package {
    import flash.display.Bitmap;
    import flash.display.Sprite;
    import flash.events.Event;
    
    public class Main extends Sprite {
        // 真ん中が透過な画像なら多分何でもいけます
        private static var IMAGE_URL:String =
        "http://assets.wonderfl.net/images/related_images/a/a2/a235/a23539b3cebd3c86ed745a2ae2afae32bfa32bfc";
        private static var IMAGE_NUM:int = 10;                // 入れ子にする画像数
        private static var IMAGE_OFFSET_X:Number = 90;        // X座標位置の補正値
        private static var IMAGE_OFFSET_Y:Number = 330;        // Y座標位置の補正値
        private static var SCALE_DEFAULT:Number = 1.5;        // 初期拡大率
        private static var SCALE_MULTIPLIER:Number = 0.45;    // 拡大率の係数
        private static var SCALE_LIMIT:Number = 6;            // 拡大率の限界値
        private static var SCALE_INCREASE:Number = 1.01;    // 拡大率の増加量
        
        private var _jobs:ExternalImageLoader;
        private var _sprites:Array;
        
        public function Main() {
            _jobs = new ExternalImageLoader();
            _jobs.addEventListener(Event.COMPLETE, initialize);
            _jobs.load(IMAGE_URL);
        }
        
        private function initialize(e:Event):void {
            _jobs.removeEventListener(Event.COMPLETE, initialize);
            
            _sprites = [];
            for (var i:int = 0; i < IMAGE_NUM; ++i) {
                var bitmap:Bitmap = new Bitmap(_jobs.image);
                bitmap.x = -(IMAGE_OFFSET_X);
                bitmap.y = -(IMAGE_OFFSET_Y);
                
                var sprite:Sprite = new Sprite();
                sprite.x = IMAGE_OFFSET_X;
                sprite.y = IMAGE_OFFSET_Y;
                sprite.scaleX = (sprite.scaleY = SCALE_DEFAULT * Math.pow(SCALE_MULTIPLIER, i));
                sprite.addChild(bitmap);
                
                _sprites.push(sprite);
                addChildAt(sprite, 0);
            }
            
            addEventListener(Event.ENTER_FRAME, update);
        }
        
        private function update(e:Event):void {
            for (var i:int = 0; i < IMAGE_NUM; ++i) {
                var sprite:Sprite = _sprites[i];
                sprite.scaleX = (sprite.scaleY *= SCALE_INCREASE);
            }
            
            // 最大の拡大率の画像が、限界値を超えていたら(完全に画面外に出ていたら)
            // 拡大率を最小にして、最奥へ再配置する
            var largest:Sprite = _sprites[0];
            var smallest:Sprite = _sprites[IMAGE_NUM - 1];
            if (largest.scaleY > SCALE_LIMIT) {
                largest.scaleX = (largest.scaleY = smallest.scaleY * SCALE_MULTIPLIER);
                _sprites.push(_sprites.shift());
                addChildAt(largest, 0);
            }
        }
    }
}
//package {
    import flash.display.BitmapData;
    import flash.display.Loader;
    import flash.events.Event;
    import flash.events.EventDispatcher;
    import flash.net.URLRequest;
    import flash.system.LoaderContext;
    
    //public 
    class ExternalImageLoader extends EventDispatcher {
        public var image:BitmapData;
        
        private var _tmpA:Loader;
        private var _tmpB:Loader;
        
        public function ExternalImageLoader() {
            image = null;
        }
        
        public function load(url:String):void {
            _tmpA = new Loader();
            _tmpA.contentLoaderInfo.addEventListener(Event.INIT, tmpALoaded);
            _tmpA.load(new URLRequest(url), new LoaderContext(true));
        }
        
        private function tmpALoaded(e:Event):void {
            e.target.removeEventListener(Event.INIT, tmpALoaded);
            image = new BitmapData(int(_tmpA.width), int(_tmpA.height), true, 0x00ffffff);
            _tmpB = new Loader();
            _tmpB.contentLoaderInfo.addEventListener(Event.INIT, tmpBLoaded);
            _tmpB.loadBytes(_tmpA.contentLoaderInfo.bytes);
        }
        
        private function tmpBLoaded(e:Event):void {
            e.target.removeEventListener(Event.INIT, tmpBLoaded);
            image.draw(_tmpB);
            _tmpA = _tmpB = null;
            dispatchEvent(new Event(Event.COMPLETE));
        }
    }
//}