2010-05-27 4 views
0

스프라이트 내에서 x 및 y 좌표를 추적하려고합니다. 내가 무대에 사각형을 추가했습니다 :표시 객체의 ActionScript X 및 Y 로컬 좌표?

var rect:Rectangle = new Rectangle(10, 10, 200, 200); 
addChild(rect); 
rect.x = rect.y = 100; 

RECT에 MOUSE_MOVE 이벤트를 추가하는, 나는 RECT를 통해 이동하면서 mouseX과 쥐색의 무대의 좌표를받을 추적 할 수 있습니다,하지만 난 어떻게받을 수 있나요 로컬 x 및 y 좌표? 그래서 마우스 오른쪽 rect 스프라이트의 왼쪽 위에 mouseX 및 mouseY 전역 좌표로 10 반환하지만 어떻게 0 및 스프라이트 로컬 좌표를 반환 할 수 있습니까?

은 내가 한 localX 가정 및 및 localY 내가 무엇을 찾고 있었다, 그러나이 작동하지 않습니다

function mouseOverTraceCoords(evt:MouseEvent):void 
{ 
trace(mouseX, mouseY, evt.localX, evt.localY); 
} 

답변

2

그것은 당신이 이런 식으로 뭔가를 할 경우 당신은 당신의 Rectangle 클래스, 을 설계 얼마나 따라 달라

class Rect1 extends Sprite { 
    public function Rect1(x:Number, y:Number, width:Number, height:Number) { 
     var g:Graphics = graphics; 
     g.beginFill(0xff0000, 0.5); 
     g.drawRect(x, y, width, height); 
     g.endFill(); 
    } 
} 

당신의 0,0에있을 것입니다 좌표하지만 당신은 당신이를 점점 너무 x,y에서 시작을 그리기 지역 localx, localY 이 아닌 x,y을 얻을 수 있습니다.

하지만 당신의 클래스가 그런 식으로 설계되어있는 경우 :

다음 0,0에서 도면 시작 및 개체가 MouseEvent에서 x,y 그래서 localXlocalY에서 이동
class Rect2 extends Sprite { 
    public function Rect2(x:Number, y:Number, width:Number, height:Number) { 
     var g:Graphics = graphics; 
     g.beginFill(0xff0000, 0.5); 
     g.drawRect(0, 0, width, height); 
     g.endFill(); 

     this.x = x; 
     this.y = y; 
    } 
} 

확인 될 것입니다.

편집 : 이 지역은 도로 getBounds를 사용하려고 할 수 있습니다 좌표 얻으려면 : 내가 rect.mouseX 및 rect.mouseY를 호출 할 때

function mouseOverTraceCoords(evt:MouseEvent):void { 
var dob:DisplayObject = DisplayObject(evt.target); 
var bnds:flash.geom.Rectangle = getBounds(dob.parent); 
var localX:Number=e.localX - bnds.x + dob.x; 
var localY:Number=e.localY - bnds.y + dob.y; 

trace(mouseX, mouseY, evt.localX, evt.localY, localX, localY); 
} 
+0

첫 번째 예와 같이 설계되었습니다. 그래서 어떻게 그 지역 좌표를받을 수 있습니까? rect 스프라이트는 draggable, 그래서 내가 당신의 두 번째 예제에서와 같은 그것의 위치를 ​​할당 할 수 없습니다. – TheDarkIn1978

+0

@ TheDarkIn1978 좋아, 내 대답을 편집 한 귀하의 응용 프로그램에서 작동하는지 확인하십시오. 덕분에 – Patrick

+0

. 그것은 내가 예상했던 것보다 훨씬 쉬워졌다. 난 단지 evt.localX를 getRect (this) .x에서 빼서 로컬 좌표를 받았다. 이 문제를 해결하는 데 너무 오래 걸렸습니다. – TheDarkIn1978

1

살펴보고, Rectangle에는 마우스의 로컬 좌표가 포함 된 mouseXmouseY이라는 두 개의 속성이 있습니다.

사각형 내에서 그래픽 오프셋을 그리는 경우 좌표계에서이를 고려하지 않으므로 대신 전체 사각형을 오프셋하는 것이 좋습니다.

* 귀하의 Rectangle 클래스가 DisplayObject의 서브 클래스라고 가정합니다. 귀하가 무대에 올린 이후로 가정합니다.

+0

, 내가 무대의 mouseX과 쥐색의 – TheDarkIn1978

+0

내가 같은 좌표를 얻을 스테이지 중간에 rect를 추가하면 X = 0, Y = 0에 있지 않으므로 같은 좌표를 반환하지만 여전히 동일합니다. – TheDarkIn1978

+0

나는 내 대답을 약간 업데이트했다. – grapefrukt

관련 문제