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

forked from: 再帰関数

再帰関数
何回呼ばれるかを記憶したり、呼ばれた回数によって分岐したりしてる。
再帰の一番最初の初期化ってこれでいいのかな。うまい方法あるのかな。
画面中央より左側をクリックすると、繰り返す数値を -10 します
画面中央より右側をクリックすると、繰り返す数値を +10 します
Get Adobe Flash player
by 9re 15 Feb 2010
/**
 * Copyright 9re ( http://wonderfl.net/user/9re )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/4jar
 */

// forked from cpu_t's 再帰関数
// 再帰関数
// 
// 何回呼ばれるかを記憶したり、呼ばれた回数によって分岐したりしてる。
// 再帰の一番最初の初期化ってこれでいいのかな。うまい方法あるのかな。
// 
// 画面中央より左側をクリックすると、繰り返す数値を -10 します
// 画面中央より右側をクリックすると、繰り返す数値を +10 します
// 
package {
	import flash.display.Graphics;
    import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.text.TextField;
	[SWF(width = 465, height = 465, backgroundColor = 0xFFFFFF, frameRate = 60)]
    public class FlashTest extends Sprite {
		private var tf:TextField;
		private var g:Graphics;
        public function FlashTest() {
        		var sp:Sprite = new Sprite;
			sp.y = 465 * .5;
			sp.x = (465 - linelength * 2) * 0.5;
            g = sp.graphics;
			stage.addChild(tf = new TextField());
			
			addChild(sp);
			
			startDrawing();
			
			stage.addEventListener(MouseEvent.MOUSE_DOWN, md);
        }
		private var lineNum:int = 100;
		private function md(e:MouseEvent):void
		{
			if (mouseX < 465 * .5) lineNum -= 10;
			else lineNum += 10;
			if (lineNum <= 0) lineNum = 10;
			startDrawing();
		}
		
		private function startDrawing():void {
			tf.text = lineNum + '';
			g.clear();
			g.lineStyle( -1, 0);
			g.moveTo(0, 0);
			draw(lineNum + 1, 0, 0, 0);
		}
		
		private const linelength:Number = 200;
		private var firstn:int = -1;
		private function draw(n:int, px:Number, py:Number, ang:Number):void
		{
			if (n < 0)
			{
				firstn = -1;
				return;
			}
			else if (firstn == -1) firstn = n;
			g.lineTo(px, py);
			draw(
				--n,
				px + Math.cos(ang) * linelength,
				py + Math.sin(ang) * linelength,
				n % 2 == 0 ?
					ang + 180 / firstn * (firstn - n) * Math.PI / 180 :
					ang + (180 - 180 / firstn * (firstn - n)) * Math.PI / 180
			);
		}
    }
}