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: Bitmap.draw()を使ってみる2

Bitmapにstageの絵柄を書き込む。
直前に描いた画像をちょっとずつ暗くすると、
残像が残ったようにみえる。
/**
 * Copyright folbore ( http://wonderfl.net/user/folbore )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/3BpU
 */

// forked from umhr's Bitmap.draw()を使ってみる2
/*
Bitmapにstageの絵柄を書き込む。
直前に描いた画像をちょっとずつ暗くすると、
残像が残ったようにみえる。

*/
package {
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.geom.ColorTransform;
    
    import caurina.transitions.Tweener;

    public class Main extends Sprite {
        private var _sp:Sprite;
        private var _bitmap:Bitmap;
        private var _colorTransform:ColorTransform;
        
        public var lac_s : Sprite = new Sprite();
        public var lacx : Number , lacy : Number = 15;

        public function Main() {
            
            _sp = new Sprite();
            _sp.graphics.beginFill(0xFF0000,1);
            _sp.graphics.drawRect(100,0,100,100);
            _sp.graphics.endFill();
            _sp.x=stage.stageWidth/2;
            _sp.y=stage.stageHeight/2;
            //this.addChild(_sp);
            
            var ha : Number; //歯末のたけ
            var hf : Number; //歯元のたけ
            var p : Number; //基準ピッチ
            var a : Number; //圧力角
            var i : int;        
            
            //ラック設定
            ha = 20;
            hf = 20;
            p = 40;
            a = 20; //度
            z = 7; //歯数

            //描画
            lacx = stage.stageWidth/2-p/2*z;
            a=a/180*Math.PI;
            
            lac_s.graphics.beginFill(0xFF00FF)
            lac_s.graphics.lineTo(hf*Math.tan(a)+lacx,0);
            for (i=0 ; i<z ; i++) {
                lac_s.graphics.lineTo(hf*Math.tan(a)+p*i+lacx,lacy);
                lac_s.graphics.lineTo(p/2-hf*Math.tan(a)+p*i+lacx,lacy);
                lac_s.graphics.lineTo(p/2+ha*Math.tan(a)+p*i+lacx,ha+hf+lacy);
                lac_s.graphics.lineTo(p-ha*Math.tan(a)+p*i+lacx,ha+hf+lacy);
            }
            lac_s.graphics.lineTo(p+ha*Math.tan(a)+p*(i-1)+lacx,lacy);
            lac_s.graphics.lineTo(p+ha*Math.tan(a)+p*(i-1)+lacx,0);
            lac_s.graphics.endFill();
            addChild(lac_s);
            
            //bitmapの表示エリアを作っている。
            var bitmapData:BitmapData=new BitmapData(stage.stageWidth,stage.stageHeight);
            _bitmap=new Bitmap(bitmapData);
            this.addChild(_bitmap);
            
            //変色の内容。ちょっとだけ暗くしている。
            _colorTransform = new ColorTransform(1, 1, 1, 1, -0x5, -0x5, -0x5);
            
            this.addEventListener(Event.ENTER_FRAME,onEnter);
        }
        
        private function onEnter(event:Event):void {
            //Spriteを回転
            lac_s.rotation++;
            
            //一度、真っ白に戻している。
            //_bitmap.bitmapData.fillRect(_bitmap.bitmapData.rect,0xFFFFFF);
            //前に描いた画像を変色している。
            //_bitmap.bitmapData.colorTransform(_bitmap.bitmapData.rect,_colorTransform);
            //_bitmap.bitmapData.scroll(1,1);
            //stageの内容を書き込んでいる。
            _bitmap.bitmapData.draw(stage);
        }
        
        //ラックを描く
        public function drawlac() :Sprite {
            var ha : Number; //歯末のたけ
            var hf : Number; //歯元のたけ
            var p : Number; //基準ピッチ
            var a : Number; //圧力角
            var i : int;        
            
            //ラック設定
            ha = 20;
            hf = 20;
            p = 40;
            a = 20; //度
            z = 7; //歯数

            //描画
            lacx = stage.stageWidth/2-p/2*z;
            a=a/180*Math.PI;
            
            lac_s.graphics.beginFill(0xFF00FF)
            lac_s.graphics.lineTo(hf*Math.tan(a)+lacx,0);
            for (i=0 ; i<z ; i++) {
                lac_s.graphics.lineTo(hf*Math.tan(a)+p*i+lacx,lacy);
                lac_s.graphics.lineTo(p/2-hf*Math.tan(a)+p*i+lacx,lacy);
                lac_s.graphics.lineTo(p/2+ha*Math.tan(a)+p*i+lacx,ha+hf+lacy);
                lac_s.graphics.lineTo(p-ha*Math.tan(a)+p*i+lacx,ha+hf+lacy);
            }
            lac_s.graphics.lineTo(p+ha*Math.tan(a)+p*(i-1)+lacx,lacy);
            lac_s.graphics.lineTo(p+ha*Math.tan(a)+p*(i-1)+lacx,0);
            lac_s.graphics.endFill();
            return lac_s;
        }
    }
}