flash CS4로 atan2, cos/sin에 의한 회전, 행렬에의한 회전 등을 각각 구현해 보려고 테스트 하다가 원래 목적과는 다르지만 화면상의 버튼들을 배열에 담아 for문으로 한꺼번에 이벤트 적용하고 클릭한 버튼에 따라 다른 행동을 주게 하는데 성공.
그리고 부모 무비클립이 회전하고 자식 무비클립 역시 그 안에서 회전하게 하면 두 회전이 중첩되어 복잡한 궤적을 갖게된다. 하여 파리의 정신없는 움직임을 연상시키는 움직임을 보이기도 한다.

15/11/26 목

내부에 'rectM'이란 명칭의 파리 모양 무비클립을 담고 있는 'nemoM'이란 명칭의 막대기 무비클립, 'but01M'~'but05M' 명칭의 버튼용 무비클립(2번째 프레임은 버튼을 좀 더 밝은 색으로 보이게 처리)을 화면상에 올려두었다.

var n = nemoM; //네모 막대 무비클립
var but01 = but01M; //첫번째 버튼 무비클립
var but02 = but02M; //두번째 버튼 무비클립
var but03 = but03M; //세번째 버튼 무비클립
var but04 = but04M; //네번째 버튼 무비클립
var but05 = but05M; //다섯번째 버튼 무비클립
var butArr:Array = [but01, but02, but03, but04, but05];
var modes="modeChao"; //모드 변경용 변수
var ang = 0; //각도 변경용 변수
var px,py, px2,py2 = 0; //이전 점 위치 저장용.
var dx,dy = 0; //이전 점과 현 점 위치 차이 저장용
var lcolor, lcolor2=0; //선 색깔 저장용

function init(){
	lcolor = Math.random()*0xffffff;
	lcolor2 = Math.random()*0xffffff;
	px = n.rectM.x; py = n.rectM.y;
	addEventListener(Event.ENTER_FRAME, loop);
	for(var i=0; i < butArr.length; i++){
		butArr[i].addEventListener(MouseEvent.CLICK, mClick);
		butArr[i].addEventListener(MouseEvent.MOUSE_OVER, mOver);
		butArr[i].addEventListener(MouseEvent.MOUSE_OUT, mOut);
	}
}
function loop(e:Event){
	switch(modes){
		case("modeRotation"):{rotate1(); break;}
		case("modeAtan2"):{rotate2(); break;}
		case("modeCosSin"):{rotate3(); break;}
		case("modeCircle"):{rotate4(); break;}
		case("modeChao"):{rotate5(); break;}
		default:{rotate1(); break;}
	}
}
function mOver(e:MouseEvent){ e.target.gotoAndStop(2); }
function mOut(e:MouseEvent){ e.target.gotoAndStop(1); }
function mClick(e:MouseEvent){
	graphics.clear();
	switch(e.target.name){
		case("but01M"): modes="modeRotation"; break;
		case("but02M"): modes="modeAtan2"; break;
		case("but03M"): modes="modeCosSin"; break;
		case("but04M"): modes="modeCircle"; break;
		case("but05M"): modes="modeChao"; break;
	}
}
function rotate1(){
	n.rotation += 2;
	n.rectM.rotation += 2;
}
function rotate2(){
	n.rotation += 4;
	//진행각도 구해 회전시키기
//	ang = Math.atan2(n.y, n.x);
//	n.rectM.rotation = ang * 180/Math.PI;
	n.rectM.rotation = n.rotation;
}
function rotate3(){
	n.rotation += 5;
	n.rectM.x = Math.cos(ang)-Math.sin(ang)*100;
	n.rectM.y = Math.sin(ang)+Math.cos(ang)*150;
	n.rectM.rotation += 20;
	ang += 0.05;
}
function rotate4(){
	n.rotation += 5;
	n.rectM.x = Math.cos(ang)-Math.sin(ang)*100;
	n.rectM.y = Math.sin(ang)+Math.cos(ang)*100;
	n.rectM.rotation += 10;
	ang += 0.05;
	n.rectM.x += 50, n.rectM.y += 30;
	//선그리기 처리
	lineDraw01(px+n.x-50, py+n.y-30, n.rectM.x+n.x-50, n.rectM.y+n.y-30, 1, lcolor);
	lineDraw01(px+n.x-50, py+n.y-30, n.x, n.y, 1, lcolor2);
	px2 = n.x, py2 = n.y;
	px = n.rectM.x; py = n.rectM.y;
	if(ang >= 6.29){
		ang = 0;
		graphics.clear();
		lcolor = Math.random()*0xffffff;
		lcolor2 = Math.random()*0xffffff;
	}
}
function rotate5(){
	n.rotation += 5;
	n.rectM.x = Math.cos(ang)-Math.sin(ang)*100;
	n.rectM.y = Math.sin(ang)+Math.cos(ang)*150;
	n.rectM.rotation += 12;
	ang += 0.05;
	n.rectM.x += n.width/2, n.rectM.y += n.height/2;
	//선그리기 처리
	lineDraw01(px+n.x, py+n.y, n.rectM.x+n.x, n.rectM.y+n.y, 1, lcolor);
	px = n.rectM.x; py = n.rectM.y;
	if(ang >= 62.9){
		ang = 0;
		graphics.clear();
		lcolor = Math.random()*0xffffff;
	}
}

function lineDraw01(mX,mY,tX,tY,style1=1,style2=0){ //선그리기 함수
	//(mX,mY)위치로 이동, 그곳에서 (tX,tY)까지 style(굵기,색)대로 선그리기
	graphics.lineStyle(style1, style2);
	graphics.moveTo(mX, mY);
	graphics.lineTo(tX, tY);
}

init();