Sakura
package {
import flash.display.Sprite;
import flash.events.*;
import flash.text.*;
[SWF(backgroundColor="#FFFFFF", frameRate=30)]
public class FlashTest extends Sprite {
private var range:Number = 50;
private var xpos:Number;
private var ypos:Number;
private var xpos02:Number;
private var ypos02:Number;
private var angle:Number= 0;
private var angle02:Number = 0;
//以下の値を変化させることで模様が変わります。
//{7,1}だとさくらみたいです。
//本当は花びら5枚なんですけどね。
//数値入力を可能にすると↓のような感じです。
//http://emnobu.sakura.ne.jp/products/as3/spiro/
private var _nm01:Number = 7;
private var _nm02:Number = 1;
private var beginX:Number;
private var beginY:Number;
private var flag:Boolean = false;
public function FlashTest()
{
graphics.lineStyle(0,0xFF99FF,1);
//描画の始点に移動
graphics.moveTo(stage.stageWidth/2 + Math.cos(angle) * range + Math.cos(angle02) * range,
stage.stageHeight/2 + Math.sin(angle) * range + Math.sin(angle02) * range);
//始点を変数に入れておく
beginX = stage.stageWidth/2 + Math.cos(angle) * range + Math.cos(angle02) * range;
beginY = stage.stageHeight/2 + Math.sin(angle) * range + Math.sin(angle02) * range;
addEventListener(Event.ENTER_FRAME, emEnter);
}
//値を変化させながら描画させ続ける。
private function emEnter(evt:Event):void
{
xpos = stage.stageWidth/2 + Math.cos(angle) * range;
ypos = stage.stageHeight/2 + Math.sin(angle) * range;
xpos02 = xpos + Math.cos(angle02) * range;
ypos02 = ypos + Math.sin(angle02) * range;
graphics.lineTo(xpos02,ypos02);
angle += _nm01;
angle02 += _nm02;
//厳密には一周していないが、ほぼ一周したら描画をとめる(視覚的に描画が確認できなくなったら、始点との近似値で描画ストップ)
if(Math.floor(xpos02) == Math.floor(beginX) && Math.floor(ypos02) == Math.floor(beginY) && flag == true)
{
removeEventListener(Event.ENTER_FRAME, emEnter);
}
//最初っからとまらないようにフラグを立てる
flag = true;
}
}
}