'rotation'에 해당되는 글 1건

  1. [2008/05/14] as 3.0 RotateTo Class

as 3.0 RotateTo Class

[FLASH/Classes]
예전에 사용하였던 것을 이연선대리 블러그를 갔다가 보고 나도 하나 만들었봤다.
업그레이드 할려니깐 오류가 참 많이 나는군... 기초를 좀 더 다져야 겠는걸... 흠~



## Color 변환 프로그램은 우야꼬(윤진상)님의 ASDecorator air 파일로 변환함.
## Document Class

- FileName : RotationSystem.as

package
{
   
// 내장 클래스
    import flash.display.Sprite;
   
import flash.display.MovieClip;
   
import flash.display.DisplayObject;
   
import flash.display.Stage;
   
//
    import flash.events.MouseEvent;
   
// 외장 클래스
    import jin_u.display.RotateTo;
   
//
    public class RotateToSystem extends Sprite
    {
        
private var poleMC:MovieClip;
        
//
         public function RotateToSystem ():void
         {
              trace (
"## RotateToSystem constructor");
             
//
              initialize ();
         }
        
private function initialize ():void
         {
              trace (
"## RotateToSystem initialize()");
             
//
              poleMC=new Pole() ;
              poleMC.name=
"poleMC";
              poleMC.x=stage.stageWidth / 2;
              poleMC.y=stage.stageHeight / 2;
              addChild (poleMC);
             
//
              setListener ();
         }
        
private function setListener ():void
         {
              stage.addEventListener (MouseEvent.CLICK,onClick);
         }
        
private function onClick (e:MouseEvent):void
         {
              RotateTo.rotateToPos (poleMC,mouseX,mouseY,0.2);
         }
    }
}

- FileName : jin_u.display.RotateTo .as
package jin_u.display
{
    import flash.display.DisplayObject;
    //
    import flash.events.Event;
    //
    public class RotateTo
    {
         private static var tMC:DisplayObject;
         //
         private static var tX:Number;
         private static var tY:Number;
         private static var dX:Number;
         private static var dY:Number;
         private static var kP:Number;
         private static var dR:Number;
         private static var sP:Number;
         private static var nR:Number;
         private static var oR:Number;
         //
         public function RotateTo ():void
         {
              trace ("## RotateTo constructor");
         }
         public static function rotateToPos (tmc:DisplayObject=null,targetX:Number=0,targetY:Number=0,targetSp:Number=0):void
         {
              tMC = tmc;
              tX = targetX;
              tY = targetY;
              sP = targetSp;
              //
              setListener ();
         }
         private static function setListener ():void
         {
              tMC.addEventListener (Event.ENTER_FRAME, onEF);
         }
         private static function onEF (e:Event):void
         {
              dX=tMC.x - tX;
              dY=tMC.y - tY;
              kP=Math.atan2(dY,dX) / Math.PI * 180;
              //거리를 계산하여 x값을 rotation값으로 변환시킨다.
              dR=kP - tMC.rotation;
              //0 과 -180 을 지날때 변경 시킨다
              if (Math.abs(dR) > 180)
              {
                   dR=360 - Math.abs(kP - tMC.rotation);
                   if (tMC.rotation < 0)
                   {
                        tMC.rotation=tMC.rotation - dR * sP;
                   }
                   else if (tMC.rotation > 0)
                   {
                        tMC.rotation=tMC.rotation + dR * sP;
                   }
              }
              else
              {
                   //0 과 180 을 지날때는 그냥 대입한다
                   tMC.rotation=tMC.rotation + dR * sP;
              }
              nR = tMC.rotation;
              // 현재 로테이션과 이전의 로테이션이 같다면 리스터를 삭제함.
              if (nR == oR)
              {
                   destroy ();
              }
              oR = nR;
         }
         private static function destroy ():void
         {
              tMC.removeEventListener (Event.ENTER_FRAME, onEF);
         }
    }
}
2008/05/14 07:59 2008/05/14 07:59