2011-04-12 3 views
1

저는 잠시 동안이 문제를 겪어 왔으며 다른 사람이 도울 수 있다면 좋을 것입니다. :)회전하는 물체에 문제가 있습니다.

http://img31.imageshack.us/i/problemsc.jpg/ (문제의 그림)

그래서, 중간 하단에 등록 지점이 객체가 있습니다. 이 객체가 마우스를 따라 가면서 회전하는 동안 화면 가운데에 남기를 원합니다. 다음은 내가 사용한 것입니다.

dx = mouseX - this.x ; 
dy = mouseY - this.y ; 

radians = Math.atan2(dy, dx); 
angle= radians * 180/Math.PI; 

this.rotation = angle + 90; 
this.y = mouseY + this.height; 

이 코드의 문제점은 마우스를 가운데에서 벗어나면 (예 : 각도가 90 도가 아니므로 마우스 커서와 대상 사이에 간격 띄우기가 있습니다. 추적을하면 마우스의 y 위치를 따라야한다는 것을 알았지 만 객체를 회전하면 높이와 너비가 변하기 때문에 객체가 커서를 바로 가리키고 있지 않습니다.

이 오프셋을 보상 할 방법이 있습니까? 아니면 다른 접근법일까요? 미리 감사드립니다.

업데이트 : 좋아, 문제를 올바르게 설명하지 않은 것으로 보입니다. 죄송합니다. 영어가 제 모국어가 아닙니다. 나는 커서를 따라 객체를 필요로하지만, 객체의 앞쪽 끝은 커서의 같은 위치에 있고 객체의 뒤쪽 끝은 화면의 중앙에 있어야하며, 중심 x 축에 있어야합니다. 따라서 마우스를 움직이면 객체의 프런트 엔드는 항상 마우스를 가리키고 마우스 위치에있게됩니다. 백 엔드는 같은 위치에 있어야하지만 회전해야합니다.

답변

0

올바른 등록 포인트가있는 경우 개체를 이동할 필요가 없습니다. 무대 중앙에 따라 회전시켜야합니다. 사용이 :

this.rotation = (Math.atan2(stage.mouseY - stage.stageHeight/2, stage.mouseX - stage.stageWidth/2)/Math.PI) * 180 

당신은 여기에서 샘플 FLA에 다운로드 할 수 있습니다 나를 위해 http://rapidshare.com/files/457051556/rotation_mouse.fla

+0

안녕하세요, 감사를 업로드,하지만 그건 내가 찾고되지 않습니다. 마우스 커서에서 시작하여 화면 가운데에서 끝내야하는 객체가 필요합니다. 객체를 움직여야합니다 .... – GeorgeCross

+0

객체를 움직일 수 있지만 중심을 기준으로 객체를 회전하려면 그리고 그 등록 포인트에 당신은 그 공식을 사용해야합니다. 이 fla 확인 : [link] http://rapidshare.com/files/457056048/rotation_mouse2.fla – btibia

2

다음 작품 (그것은 당신에게 거의 동일입니다)

import flash.events.MouseEvent; 

const RAD_TO_DEG:Number = 180/Math.PI; 
const OFFSET:Number = 90; 

var angle:Number; 
var radians:Number; 

stage.addEventListener(MouseEvent.MOUSE_MOVE, moveIt, false, 0, true); 

function moveIt(e:MouseEvent):void { 
    radians = Math.atan2(mouseY - mc.y, mouseX - mc.x); 
    angle = radians * RAD_TO_DEG; 

    mc.rotation = angle + OFFSET; 
} 

그냥 당신이 있는지 확인 등록 포인트가 올바르게 설정 됨 (이미지 참조)

enter image description here

나는 또한 내가 당신의 예를 확인, 제안에 대한 SWF

http://megaswf.com/serve/1054550