In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

Sakura

Get Adobe Flash player
by emnobu 29 Apr 2009
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;
        }        
    }
}