2012-08-27 5 views
0

은 (픽셀!) 글로벌 화면 위치를 얻으려면 내가 topLeft.y에 대한 땐 내가 갖는 이중 값 것으로 나타났습니다 DisplayObject::localToGlobal 포인트를 픽셀 좌표로 변환하려면 어떻게해야합니까?

var o: DisplayObject = ...; 
var topLeft: Point = o.localToGlobal(new Point(0, 0)); 

같은 일부 DisplayObject의 나는 약간의 기대에도 불구하고 전화 드렸습니다 정수 값. 몇 가지 스케일링이나 좌표계가 고려해야합니까?

답변

0

x/y 좌표 및 width/height은 플래시의 부동 소수점 값입니다. 하위 픽셀 값 (즉, 정수가 아닌 값)을 갖는 객체의 크기/위치를 지정하는 것은 완벽하게 합법적입니다.

스케일링에 대해, 당신은 인해 DisplayObject의 부모에 적용되는 변환에가 조정되고 있는지, 또는 1

+0

좋아, 그렇다면 * I 픽셀 값의 서브 화소 값을 변환 * 않음 - scaleX가/scaleY를 것만으로 승산하고 '부분적'고려 (다음 정수 값으로 올림 덮여 픽셀은 완전히 덮여)? 내가 직접해야만하는 것은 의심 스럽다 ... 나를 위해 이것을 행할 변형 행렬이 있어야한다는 느낌을 떨칠 수 없다. –

+1

디스플레이 목록에서 객체를 사용할 때'x' /'y' /'width' /'height'를 정수로 변환하지 않아도됩니다. 플래시 플레이어는 서브 픽셀 (트윕?)을 잘 처리합니다. int가 필요하면 반올림을 제어해야한다면 int (가장 빠름)로 캐스팅하거나 '수학'함수 (round/floor/ceil)를 사용하십시오. –

+0

문제는 이러한 좌표가 다른 프로세스 (소켓을 통해 데이터를받는)가 사용한다는 것입니다. 즉, 다른 프로세스가 전역 좌표를 픽셀로받을 것으로 예상합니다. 그래서 불행히도 나는 이것을 스스로해야만한다. : -/ –

2

이 될 수 이러한 값을 강제로 객체를 scaleXscaleY 속성을 조회 할 수 있습니다 .

당신은 사용 DisplayObject에 영향을 미치는 모든 변환을 찾을 수 있습니다

myDisplayObject.transform.concatenatedMatrix; 

이 대상 및 표시 목록의 루트까지 부모에 적용된 모든 변형의 결과이다.

More info.

+0

재미있는 것 같습니다 ... –

관련 문제