ひだまりスケッチ ほしみっつ の星
ひだまりの星
@author Hiiragi
「超☆ひだまつり -2~4時間テレビ-」に向けて作ってみました。嘘です。
なんか色合いというかエフェクトというか、いろいろ微妙。
ゆのっちもかわいいけど、なづなちゃんもかわいいよね。
#もし版権的にアウトであれば、削除いたします。
package
{
import flash.display.Sprite;
import flash.events.Event;
/**
* ひだまりの星
* @author Hiiragi
*
* 「超☆ひだまつり -2~4時間テレビ-」に向けて作ってみました。嘘です。
* なんか色合いというかエフェクトというか、いろいろ微妙。
*
* ゆのっちもかわいいけど、なづなちゃんもかわいいよね。
*
* #もし版権的にアウトであれば、削除いたします。
*/
[SWF(width = 465, height = 465, frameRate = 30, backgroundColor = 0xffd5f7)]
public class HidamariStarTest extends Sprite
{
private var _hidamariStar:HidamariStar;
public function HidamariStarTest()
{
_hidamariStar = new HidamariStar(150);
_hidamariStar.x = this.stage.stageWidth / 2;
_hidamariStar.y = this.stage.stageHeight / 2;
this.addChild(_hidamariStar);
this.addEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
}
private function onEnterFrameHandler(e:Event):void
{
_hidamariStar.rotation += 1;
}
}
}
import flash.display.GradientType;
import flash.display.Graphics;
import flash.display.Sprite;
import flash.filters.BevelFilter;
import flash.filters.BitmapFilterType;
import flash.geom.Matrix;
class HidamariStar extends Sprite
{
private var _cx:Number;
private var _cy:Number;
private var _radius:Number;
private var _insideRatio:Number;
private var _secondStar:Sprite;
private var _centerStar:Sprite;
private var _secondStarBevelFilter:BevelFilter;
private var _centerStarBevelFilter:BevelFilter;
public function HidamariStar(radius:Number,
cx:Number = 0,
cy:Number = 0,
insideRatio:Number = 0.5)
{
_radius = radius;
_cx = cx;
_cy = cy;
_insideRatio = insideRatio;
_secondStar = new Sprite();
_centerStar = new Sprite();
this.addChild(_secondStar);
this.addChild(_centerStar);
_secondStarBevelFilter = new BevelFilter(2, -45, 0x996666, 1, 0, .3, 2, 2, 1, 2, BitmapFilterType.OUTER, false);
_centerStarBevelFilter = new BevelFilter(2, -45, 0x996666, 1, 0, .5, 2, 2, 1, 2, BitmapFilterType.OUTER, false);
_secondStar.filters = [_secondStarBevelFilter];
_centerStar.filters = [_centerStarBevelFilter];
draw();
}
public function draw():void
{
var mtx:Matrix = new Matrix();
var g:Graphics = this.graphics;
g.clear();
g.beginFill(0xFFFFFF);
g.lineStyle(10, 0xFFFFFF);
drawStar(g, _radius);
g.endFill();
g = _secondStar.graphics;
g.clear();
mtx.createGradientBox(_radius * 2, _radius * 2, -Math.PI / 4, -_cx -_radius, -_cy - _radius);
g.beginGradientFill(GradientType.LINEAR, [0xf0ac96, 0x780100], [1, 1], [0, 255], mtx);
drawStar(g, _radius * .95);
g.endFill();
g = _centerStar.graphics;
g.clear();
mtx.createGradientBox(_radius * 2, _radius * 2, -Math.PI / 4, -_cx -_radius, -_cy - _radius);
g.beginGradientFill(GradientType.LINEAR, [0xfdf9fa, 0xfdae10], [1, 1], [0, 255], mtx);
drawStar(g, _radius * 0.8);
g.endFill();
}
private function drawStar(g:Graphics, radius:Number):void
{
g.moveTo(_cx, _cy - radius);
var diffRad:Number = Math.PI * 2 / 10;
var rad:Number = -Math.PI / 2;
var tempRadius:Number;
for (var i:int = 1; i <= 10; i++)
{
rad += diffRad;
tempRadius = (i % 2 == 1) ? tempRadius = radius * _insideRatio : tempRadius = radius;
g.lineTo(Math.cos(rad) * tempRadius + _cx, Math.sin(rad) * tempRadius + _cy);
}
}
public function get radius():Number { return _radius; }
public function set radius(value:Number):void
{
_radius = value;
draw();
}
public function get insideRatio():Number { return _insideRatio; }
public function set insideRatio(value:Number):void
{
_insideRatio = value;
draw();
}
}