8985SWF

http://8985.tumblr.comが格好良すぎたのでFlashバージョンをAS3の勉強がてら作ってみた。

サンプルはこちらより:8985SWF


以下ソース

package {
    import flash.display.*;
    import flash.events.*;
    import flash.net.*;
    import flash.geom.*;

    public class Main extends Sprite{
        private var imgLoader:Loader = new Loader ();
        private var w:int;
        private var h:int;
        private var bgBm:Bitmap;
        private var defBm:Bitmap;
        private var refBm:Bitmap;
        private var matrix:Matrix = new Matrix();
        private var myMask:Sprite = new Sprite();

        private var ofst:int = 0;

        public function Main():void{
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;
            var paramObj:Object = LoaderInfo(loaderInfo).parameters;
            var url:String = paramObj["url"];
            ofst = paramObj["ofst"];
            var urlReq : URLRequest = new URLRequest(url);
            imgLoader.load(urlReq);
            imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,drawImg);
            stage.addEventListener("resize",function(){fitImg()});
        }
        private function drawImg(e:Event) : void {
            w = (stage.stageWidth/2 < imgLoader.width-ofst ? stage.stageWidth/2 : imgLoader.width-ofst);
            h = imgLoader.height;

            var bgBmd:BitmapData = new BitmapData(1,h);
            var defBmd:BitmapData = new BitmapData(w,h);
            var refBmd:BitmapData = new BitmapData(w,h);

            bgBm = new Bitmap(bgBmd);
            defBm = new Bitmap(defBmd);
            refBm = new Bitmap(refBmd);

            addChild(bgBm);
            addChild(defBm);
            addChild(refBm);

            matrix.scale(-1,1);
            matrix.translate(w,0);

            bgBmd.draw(imgLoader,matrix,null,null,null);
            defBmd.draw(imgLoader,null,null,null,null);
            refBmd.draw(imgLoader,matrix,null,null,null);

            refBm.mask = myMask;
            myMask.x = 0;
            myMask.y = 0;
            myMask.graphics.beginFill(0x000000);
            myMask.graphics.drawRect(0,0,w,h);
            myMask.graphics.endFill();
            addChild(myMask);
            fitImg();
        };
        private function fitImg() : void {
            var isHalf = (stage.stageWidth/2 < imgLoader.width-ofst);
            w = (isHalf ? stage.stageWidth/2 : imgLoader.width-ofst);
            h = imgLoader.height;
            myMask.width = w;
            myMask.height = h;
            myMask.x = (isHalf ? w : stage.stageWidth - w);
            bgBm.width = stage.stageWidth;
            refBm.x = stage.stageWidth - (imgLoader.width-ofst);
        };
    }
}>

あーあ、ほんと、ソースキレイにかけるようになりたい。
あとどんだけ時間かかってんだよ!っていうね。

まぁでもBitmapまわりについてはなかなか分かるようになってきたな。
あとはMaskをつかった。一歩ずつやってくしかない。
メソッドも結構覚えた。そして何よりjavascriptと大きく違うのが、実行結果が楽しい!
Flexもちょっとやったんだけど、FlexBuilder欲しくなるだけだからちょっと置いておこう。

またまたユニコーン動画。89年だってよ。ボク当時ボク6歳。そして民生24歳。