반응형
마우스를 향하는 화살표 예제입니다. 간단하니 일단 보시죠~
그럼 이제부터 제작 해보겠습니다~
일단 화살표를 그려야겠죠? 아주 간단히 하나 그립니다.
package shape { import flash.display.Sprite; /** * 화살표 클래스, 오른쪽을 향하는 상태로 그려진다. */ public class DArrow extends Sprite { private var m_nWidth:Number; private var m_nHeight:Number; private var m_uColor:uint; /** * 생성자 * @param p_nWidth 화살표 가로크기(길이) * @param p_nHeight 화살표 세로크기(두께) * @param p_uColor 화살표 색상 * @param */ public function DArrow( p_nWidth:Number = 50, p_nHeight:Number = 50, p_uColor:uint = 0xffff00 ) { super(); m_nWidth = p_nWidth; m_nHeight = p_nHeight; m_uColor = p_uColor; init(); } private function init():void { graphics.clear(); var nWidthHalf:Number = m_nWidth / 2; var nHeightHalf:Number = m_nHeight / 2; var nHeightQuarter:Number = m_nHeight / 4; graphics.lineStyle( 1, 0, 1 ); graphics.beginFill( m_uColor ); graphics.moveTo( -nWidthHalf , -nHeightQuarter ); graphics.lineTo( 0, -nHeightQuarter ); graphics.lineTo( 0, -nHeightHalf ); graphics.lineTo( nWidthHalf, 0 ); graphics.lineTo( 0, nHeightHalf ); graphics.lineTo( 0, nHeightQuarter ); graphics.lineTo( -nWidthHalf, nHeightQuarter ); graphics.lineTo( -nWidthHalf, -nHeightQuarter ); graphics.endFill(); } } }
이제 위에 만들어진 화살표를 담아서 실행항 메인 클래스를 작성합니다.
package sample.ex_03_trigonometric { import flash.display.Sprite; import flash.display.StageScaleMode; import flash.events.Event; import kr.uod.util.CCopyRightPosition; import kr.uod.util.FDrawCopyRight; import kr.uod.util.FDrawOutLine; import org.osmf.display.ScaleMode; import shape.DArrow; /** * 마우스를 향하는 화살표 예제 */ [SWF(backgroundColor="0xffffff", width="600", height="400", frameRate="30")] public class ArrowTowardMouse extends Sprite { private var m_dArrow:DArrow = new DArrow( 100, 50, 0xff0000 ); public function ArrowTowardMouse() { super(); stage.scaleMode = StageScaleMode.NO_SCALE; init(); } private function init():void { // 스테이지 외곽선 그리기 FDrawOutLine( this ); // 카피라이트 FDrawCopyRight( this, "By LazyArtist" ); // 화살표 m_dArrow.x = stage.stageWidth / 2; m_dArrow.y = stage.stageHeight / 2; addChild( m_dArrow ); this.addEventListener( Event.ENTER_FRAME, onEnterFrame ); } private function onEnterFrame( e:Event ):void { var nPosX:int = mouseX - m_dArrow.x; var nPosY:int = mouseY - m_dArrow.y; // 화살표가 마우스를 향하게 하는 공식 m_dArrow.rotation = Math.atan2( nPosY, nPosX ) * 180 / Math.PI; } } }
여기서 가장 중요한 것은 53라인의 공식입니다.
Math.atan() 처럼 비율을 파라미터로 전달하면 각도를 반환하는 것이 아니라
Math.atan2()는 y, x 파라미터를 받아서 각도(라디안)를 반환합니다. 플래시 좌표체계에 특화된 함수죠...
Math.atan2()를 사용하실때 주의할점은 Math.atan2( y, x ), 이렇게 y 값을 먼저 넣어준다는 점입니다.
그렇지 않으면 플래시무비가 이상한 동작을 하게됩니다...
참~ 쉽죠잉~ ^^;
반응형
'Flash Story' 카테고리의 다른 글
[Flash] SWF를 브라우저 가운데 정렬하기 (2) | 2010.06.24 |
---|---|
베타보다 못한 정식버전... Flash Builder 4 (0) | 2010.04.09 |
[Flex] if(true)와 if(true == true) 의 속도 테스트 (0) | 2010.03.27 |