感化されて自分もひだまりの星つくってみる

by 7kamura
Copyright 7kamura ( http://wonderfl.net/user/7kamura )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/iOzz
♥0 | Line 87 | Modified 2010-05-15 00:28:15 | MIT License
play

ActionScript3 source code

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

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

package {
	import flash.display.Sprite;
	
	[SWF(width=465, height=465, back)]
	public class HoshiMittsu extends Sprite {
		public function HoshiMittsu() {
			var hs:HidamariStar = new HidamariStar(200);
			addChild(hs);
			hs.x = stage.stageWidth/2;
			hs.y = stage.stageHeight/2;
		}
	}
}

import flash.display.GradientType;
import flash.display.Graphics;
import flash.display.Sprite;
import flash.filters.*;
import flash.geom.Matrix;
class HidamariStar extends Sprite {
	private var _radius:Number;
	private var _cx:Number;
	private var _cy:Number;
	private var _insideRatio:Number;
	private var firstStar:Sprite;
	private var secondStar:Sprite;
	private var thirdStar:Sprite;
	private var forthStar:Sprite;
	private var secondStarFilter:BevelFilter;
	private var forthStarFilter:BevelFilter;
	private var g:Graphics;
	public function HidamariStar(radius:Number, cx:Number = 0, cy:Number = 0, insideRatio:Number = 0.5):void {
		_radius = radius;
		_cx = cx;
		_cy = cy;
		_insideRatio = insideRatio;
		
		addChild(firstStar = new Sprite());
		addChild(secondStar = new Sprite());
		addChild(thirdStar = new Sprite());
		addChild(forthStar = new Sprite());
		
		secondStarFilter = new BevelFilter(2, -45, 0x996666, 1, 0x000000, .3, 2, 2, 1, 2, BitmapFilterType.OUTER, false);
		forthStarFilter  = new BevelFilter(5, -120, 0x996666, 0, 0x000000, .5, 2, 2, 1, 2, BitmapFilterType.OUTER, false);
		
		secondStar.filters = [secondStarFilter];
		forthStar.filters = [forthStarFilter];
		
		draw();
	}
	
	private function draw():void {
		var matrix:Matrix = new Matrix();
		
		// 白い縁取りの星
		g = firstStar.graphics
		g.clear();
		g.beginFill(0xFFFFFF);
		g.lineStyle(10, 0xFFFFFF);
		drawStar(g, _radius);
		g.endFill();
		
		// 1番外側のグラデーション付きの星	
		g = secondStar.graphics
		g.clear();
		matrix.createGradientBox(_radius * 2, _radius * 2, -Math.PI / 4);
		g.lineStyle(10);
		g.lineGradientStyle(GradientType.LINEAR, [0xF4A890, 0x2C0901], [1, 1], [0, 255], matrix);
		g.beginGradientFill(GradientType.LINEAR, [0xF4A890, 0x2C0901], [1, 1], [0, 255], matrix);
		drawStar(g, _radius * 0.95);
		g.endFill();
		
		// 2番目のベタ塗りの赤茶色の星
		g = thirdStar.graphics
		g.clear();
		g.lineStyle(5, 0x981B01);
		g.beginFill(0x981B01);
		drawStar(g, _radius * 0.86);
		g.endFill();
		
		g = forthStar.graphics
		g.clear();
		matrix.createGradientBox(_radius * 2, _radius * 2, -Math.PI / 4);
		g.lineStyle(5);
		g.lineGradientStyle(GradientType.LINEAR, [0xfdf9fa, 0xfdae10], [1, 1], [0, 255], matrix);
		g.beginGradientFill(GradientType.LINEAR, [0xfdf9fa, 0xfdae10], [1, 1], [0, 255], matrix);
		drawStar(g, _radius * 0.72);
		g.endFill();
	}
	
	private function drawStar(g:Graphics, radius:Number):void {
		g.moveTo(_cx, _cy - radius);
		
		var diffAngle:Number =  Math.PI * 2 / 10;
		var angle:Number = - Math.PI / 2;
		var tmpRadius:Number = radius;
		
		for(var i:Number = 1; i<=10; i++) {
			angle += diffAngle;
			tmpRadius = (i%2) ? radius * _insideRatio : radius ;
			
			g.lineTo(Math.cos(angle) * tmpRadius + _cx, Math.sin(angle) * tmpRadius + _cy);
		}
	}
}

Forked