Flash+actionScript 3.0에서 무비클립을 회전시키는 방법 2가지.

1. Math 클래스의 sin, cos 메서드들을 이용해 다음 위치를 계산해 회전시키는 방법.
2. 미리 저장해둔 x, y 좌표들을 저장한 배열속 요소들을 차례로 선택해 회전시키는 방법.

2번의 경우 1번에 비해 계산량이 작아서 CPU를 많이 안잡아먹어 속도를 개선시킬 수 있다는 장점이 있다.

14/2/18 화

//===Math 함수들을 이용한 무비클립 회전시키기============

var cx:Number=100; //회전 중심 x, y 좌표
var cy:Number=100;
var ang:Number=0; //회전각도
var radius:Number=50; //회전 반지름
var tArr=[]; //회전 좌표 기록용 배열

var g:Graphics; //선그리기 위한 graphics 객체
var g2:Graphics;

function initMathRotation(){
   var canvas:Sprite = new Sprite(); //선 그릴 투명 Sprite
   addChild(canvas);
   g = canvas.graphics;
   g.lineStyle(0, 0x999999);
   g.moveTo(mc.x, mc.y);

   mc.addEventListener(Event.ENTER_FRAME, rotation1);
}

function rotation1(e:Event){
   var t=e.target;
   t.x = cx + Math.sin(toRad(ang))*radius;
   t.y = cy + Math.cos(toRad(ang))*radius;

   ang += 10;

   if(ang<=360){
      recordTrace(); //0~360 사이 x,y좌표 기록하기 함수 호출
      g.lineTo(t.x, t.y); //선 그리기.
   }
}
function recordTrace(){ //회전좌표 기록용
   var tr:String;
   if(ang<360){
      tr="["+Math.round(mc.x)+", "+Math.round(mc.y)+"]"
      tArr.push(tr);
   }else trace(tArr);
}
function toRad(inputAng){ //각도를 라디안으로 변경
   return inputAng = inputAng*(Math.PI/180);
}

initMathRotation();
initArrayRotation();

//==이동좌표를 사전 저장한 배열 활용해 무비클립 회전시키기=========
var rotArr:Array=[
[300, 150],[309, 149],[317, 147],[325, 143],[332, 138],
[338, 132],[343, 125],[347, 117],[349, 109],[350, 100],
[349, 91],[347, 83],[343, 75],[338, 68],[332, 62],
[325, 57],[317, 53],[309, 51],[300, 50],[291, 51],
[283, 53],[275, 57],[268, 62],[262, 68],[257, 75],
[253, 83],[251, 91],[250, 100],[251, 109],[253, 117],
[257, 125],[262, 132],[268, 138],[275, 143],[283, 147],[291, 149]
];

function initArrayRotation(){
   mc2.n = 0;
   var canvas2:Sprite=new Sprite(); //선 그릴 투명 Sprite
   addChild(canvas2);
   g2 = canvas2.graphics;
   g2.lineStyle(0, 0x999999);
   g2.moveTo(mc2.x, mc2.y);

   mc2.addEventListener(Event.ENTER_FRAME, rotation2);
}
function rotation2(e:Event){
   var t2=e.target;
   t2.x=rotArr[mc2.n][0];
   t2.y=rotArr[mc2.n][1];

   mc2.n++;
   g2.lineTo(t2.x, t2.y);//선 그리기.

   if(mc2.n >= rotArr.length){ //배열을 모두 돌았으면
      mc2.n = 0; //다시 처음부터 재시작
      g2.clear(); //화면 지우고
      g2.lineStyle(0, 0x999999); //새로 그리기 시작
      g2.moveTo(t2.x,t2.y);
   }
}