예전에 사용하였던 것을 이연선대리 블러그를 갔다가 보고 나도 하나 만들었봤다.
업그레이드 할려니깐 오류가 참 많이 나는군... 기초를 좀 더 다져야 겠는걸... 흠~
## 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);
}
}
}
업그레이드 할려니깐 오류가 참 많이 나는군... 기초를 좀 더 다져야 겠는걸... 흠~
## 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);
}
}
}
20080518_RotateToSystem.zip

::: 사람과 사람의 교감! 人터넷의 첫 시작! 댓글을 달아주세요! :::