flash on 2010-5-1

by gogo178
♥0 | Line 142 | Modified 2010-05-02 12:17:57 | MIT License
play

ActionScript3 source code

/**
 * Copyright gogo178 ( http://wonderfl.net/user/gogo178 )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/zS2R
 */

package {
    import flash.display.*;
    import flash.events.*;
    import flash.text.*;

    public class Main extends Sprite {
    		private var bmpflag:Boolean;
    		private var starList:Array;
    		private var counter:TextField;

        public function Main () {
        		init();
        }

        private function init ():void {
			starList = [];
			addEventListener(Event.ENTER_FRAME, function (e:Event):void {
				var i:int;
				var len:int;
				var star:Star;
				len = starList.length;
				for (i = 0; i < len; i++) {
					star = starList[i];
					star.asBitmap = bmpflag;
					star.rotation += star.r;
				}
			});
        		stage.addEventListener(MouseEvent.CLICK, function (e:MouseEvent):void {
        			var corner:int;
        			var star:Star;
        			corner = Math.floor(Math.random() * 6) + 3;
        			star = new Star(corner);
        			// star.alpha = Math.random();
        			star.scaleX = star.scaleY = Math.random();
        			star.r = Math.random() * 5;
        			star.x = stage.stageWidth * Math.random();
        			star.y = stage.stageHeight * Math.random();
        			addChildAt(star, 0);
        			//addChild(star);
        			starList.push(star);
        			counter.text = 'star:' + String(starList.length);
        		});
        		stage.addEventListener(KeyboardEvent.KEY_UP, function (e:KeyboardEvent):void {
        			if (e.keyCode == 66) {
        				bmpflag = !bmpflag;
        			}
        		});
        		layoutCounter();
        		layoutFlag();
        }

        private function layoutCounter ():void {
        		counter = new TextField();
        		counter.autoSize = TextFieldAutoSize.LEFT;
        		addChild(counter);
        }

        private function layoutFlag ():void {
        		var flag:TextField = new TextField();
        		flag.autoSize = TextFieldAutoSize.LEFT;
        		flag.text = 'キーボード「Bキー」でビットマップ切り替え';
        		flag.x = stage.stageWidth - flag.width;
        		addChild(flag);
        }
    }
}

//プライベートなクラス
//次のようにpackageと
//import flash.geom.Matrix;
//classの前のpublicを省く
import flash.display.*;
import flash.geom.*;
class Star extends Sprite {
	private var _r:Number;
	private var sp:Sprite;
	private var bmd:BitmapData;
	private var bmp:Bitmap;
	private var corner:int;

    public function Star (corner:int = 5) {
    		this.corner = corner;
		init();
    }

    // getter
    public function get r ():Number {
    		return _r;
    	}

    // setter
    public function set r (value:Number):void {
    		_r = value;
    }

    public function set asBitmap (value:Boolean):void {
    		while (numChildren) {
    			removeChildAt(0);	
    		}
    		if (value) {
    			addChild(bmp);
    		} else {
    			addChild(sp);
    		}
    }
 
	// private method
	private function init ():void {
		mouseChildren = false;
		mouseEnabled = false;
		drawBody();
		drawBitmap();
	}

	private function drawBody ():void {
        	var i:int = 0;
        	var angle:Number = 360 / corner;
        	var degree:Number = 0;
        	var radian:Number = Math.PI / 180;
        	var radius:Number = 20;
        	var posX:Number;
        	var posY:Number;
        	var g:Graphics;
        sp = new Sprite();
		g = sp.graphics;
        	g.lineStyle(0x000000, 1);
        	g.beginFill(0xFFFF00);

		degree = angle * i * radian;
		posX = Math.cos(degree) * radius;
		posY = Math.sin(degree) * radius;
		g.moveTo(posX, posY);
		degree = (angle * i + angle * 0.5) * radian;
		posX = Math.cos(degree) * radius * 2;
		posY = Math.sin(degree) * radius * 2;
		g.lineTo(posX, posY);
		for (i; i < corner; i++) {
			degree = angle * i * radian;
			posX = Math.cos(degree) * radius;
			posY = Math.sin(degree) * radius;
			g.lineTo(posX, posY);
			degree = (angle * i + angle * 0.5) * radian;
			posX = Math.cos(degree) * radius * 2;
			posY = Math.sin(degree) * radius * 2;
			g.lineTo(posX, posY);
        	}
		degree = angle * 0 * radian;
        	posX = Math.cos(degree) * radius;
        	posY = Math.sin(degree) * radius;
        	g.lineTo(posX, posY);
        	g.endFill();
	}

	private function drawBitmap ():void {
		var matrix:Matrix = new Matrix();
		matrix.tx = sp.width;
		matrix.ty = sp.height;
		bmd = new BitmapData(sp.width * 2, sp.height * 2, true, 0x00FF0000);
		bmd.draw(sp, matrix);
		bmp = new Bitmap(bmd, PixelSnapping.AUTO, true);
		bmp.x = bmd.width * -0.5;
		bmp.y = bmd.height * -0.5;
		addChild(bmp);
	}
}