이것은 불행히도 설명하기에 상당히 복잡한 문제이므로, 텍스트의 벽에 실망하지 마십시오. 이유가 있습니다. ;)Actionscript 3에서 회전 된 객체의 크기를 올바르게 조정하는 방법은 무엇입니까?
나는 Actionscript 3로 작성된 플래시 용 변환 관리자에서 작업 중이다. 사용자는 사각형과 같이 화면에 객체를 배치 할 수있다.
이 직사각형은 이동, 크기 조정 또는 회전 할 수 있습니다.
기본적으로 플래시는 객체의 왼쪽 상단 주위를 회전하기 때문에 중심 주위로 회전하기를 원하기 때문에 각 표시 객체 (예 : 사각형)에 대해 래퍼 설정을 만들었습니다.
이는 래퍼가 설치됩니다 방법입니다
//the position wrapper makes sure that we do get the top left position when we access x and y
var positionWrapper:Sprite = new Sprite();
positionWrapper.x = renderObject.x;
positionWrapper.y = renderObject.y;
//set the render objects location to center at the rotation wrappers top left
renderObject.x = 0 - renderObject.width/2;
renderObject.y = 0 - renderObject.height/2;
//now create a rotation wrapper, at the center of the display object
var rotationWrapper:Sprite = new Sprite();
rotationWrapper.x = renderObject.width/2;
rotationWrapper.y = renderObject.height/2;
//put the rotation wrapper inside the position wrapper and the render object inside the rotation wrapper
positionWrapper.addChild(rotationWrapper);
rotationWrapper.addChild(renderObject);
이제 객체의 x와 y에 액세스 할 수 있으며, 직접 설정 : mainWrapper.x 또는 mainWrapper.y을. 회전은 메인 랩퍼의 자식 인 mainWrapper.getChildAt (0) .rotation에서 설정하고 액세스 할 수 있습니다. 마지막으로, 표시 객체의 너비와 높이는 순환 래퍼의 자식을 가져 와서 표시 객체에 직접 액세스하여 수집하고 설정할 수 있습니다.
내가 그들을 액세스하는 방법에 대한 예 : 크기 조절 및 회전 이동 :
이//get wrappers and render object
var positionWrapper:Sprite = currentSelection["render"];
var rotationWrapper:Sprite = positionWrapper.getChildAt(0) as Sprite;
var renderObject:DisplayObject = rotationWrapper.getChildAt(0);
이 모든 초기 변환을 위해 완벽하게 작동합니다.
그러나 개체를 처음으로 회전 (예 : 45도) 한 다음 크기를 조절하면 문제가 발생합니다. 크기가 조정 된 객체의 모양이 변형되고 크기가 조정되지 않습니다.
예를 들어 왼쪽으로 확장하면이 문제가 발생합니다. 스케일링 왼쪽은 기본적으로 개체 폭 N을 첨가 한 후 역시 n으로 위치 랩퍼의 x COORD를 감소되어
renderObject.width -= diffX;
positionWrapper.x += diffX;
물체가 회전하지 않을 때이 작동한다. 그러나 위치 래퍼는 회전 래퍼의 부모이므로 회전되지 않습니다. 이렇게하면 오브젝트의 너비가 대각선으로 증가하는 동안 위치 래퍼가 수평으로 왼쪽으로 이동합니다.
나는 이것이 의미가 있기를 바란다. 그렇지 않다면 말해라. 나는 더 자세히 설명하려고 노력할 것이다.
이제 질문 : 다른 종류의 설정, 시스템 또는 구조를 사용해야합니까? 그렇다면 행렬을 사용해야할까요? 그렇다면 회전 후에 정적 너비/높이를 어떻게 유지 하시겠습니까? 또는 회전 후 현재 래퍼 시스템의 크기를 조정하려면 어떻게해야합니까? 어떤 도움을 주셔서 감사합니다. 이것에 대해
당신 값을 2로 나눌 때 얻을 수있는 값을 반올림하고 싶을 수도 있습니다. 홀수 인 경우 1/2 픽셀 위치에있는 객체로 끝납니다 (재밌는 앤티 앨리어싱이 발생할 수 있습니다). 이것은 당신이 원하는 것일 수도 아닐 수도 있습니다. – Cameron
스케일링이란 일반적으로 비 균일 스케일링을 의미합니까? 예 : 정사각형의 캠이 사각형이 되나요? – AVB
카메론, 고마워. AB, 예, 맞습니다. – Tom