flash on 2010-5-1
♥0 |
Line 142 |
Modified 2010-05-02 12:17:57 |
MIT License
archived:2017-03-20 10:00:11
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);
}
}