플렉스를위한 플래시 10의 matrix3D 기능을 사용하여 컨테이너 (또는 그와 관련된 모든 것)를 회전시키는 가장 좋은 방법을 찾으려고합니다.3D 플렉스, 컨테이너의 무작위 지점을 중심으로 회전 (부분 솔루션 포함)
등록 포인트가 아닌 포인트를 중심으로 회전하는 컨테이너를 얻을 수 있었지만 컨테이너에서 클리핑을 해제 한 다음 (0,0,0). 이것은 효과가 있지만 매우 직관적이지 않고 여러 항목을 배치하려고 할 때 또는 회전 지점을 이동해야하는 경우에도 빠릅니다.
matrix3D 클래스를 사용하는 것은 길로 보일 수 있지만 정확하게는 모르겠습니다.
건배
추가 정보 - 내 컨테이너는 무대에서 (0, 0, 0)에 내가 그때에 container.width/2에 의해 번역 용기의 중간 X의 COORD 중심으로 회전하려면 X는 다시 회전하고 다시 번역합니다. 이것은 잘 작동합니다. 하지만 내 컨테이너가 (10, 0, 0)이라고 말하면 위와 같은 것을 변환하고 추가 10을 더하면 작동하지 않습니다. (완전 쓰레기입니다 - 당신이 할 수있는 경우를 설명하십시오)
Soloution 그런 다음, 회전, 번역 -traslate을 필요로 제시 한 바와 같이 . 나는 이것을 알고 있었지만 결코 효과가 없었다.
아래의 soloution을 참조하십시오, 나는 그것을 얻지 못합니다. (패널은 내가 회전하는 객체이고, 함수를 둘 다 호출합니다.)
private function rotateOnly() : void {
panel.transform.matrix3D.appendRotation(36, Vector3D.Y_AXIS);
}
private var valueToMove : Number = 300;
private var translateUpOrDown : Boolean = false;
private function translateOnly() : void {
if(translateUpOrDown){
panel.transform.matrix3D.appendTranslation(valueToMove, 0, 0);
translateUpOrDown = false;
} else {
panel.transform.matrix3D.appendTranslation(-valueToMove, -0,0);
translateUpOrDown = true;
}
}
//I do not run both chunks of code here at once, this is only to show what I've tried
private function both() : void {
//IF I call this function and call this chunk then the rotation works
translateOnly();
rotateOnly();
translateOnly();
//If I call this chunk which does the exact same as the above it does NOT work!!
panel.transform.matrix3D.appendTranslation(valueToMove, 0,0);
panel.transform.matrix3D.appendRotation(36, Vector3D.Y_AXIS);
panel.transform.matrix3D.appendTranslation(-valueToMove, 0,0);
}
코드 두 번째 덩어리가 잘못 번역되어 있습니다. - 첫 번째 번역은 음수이어야하고, 회전하고, 내 대답에 따라 긍정적 인 번역이 이루어져야합니다. – Alnitak
훔쳐 보면 어떻게 될지 오랫동안 쟁점으로! 처음에는 컨테이너 폭, 높이, x와 y를 사용하여 번역을 혼란스럽게 만들었습니다. 그렇게하면 전체 모양이 엉망이됩니다. 건배. – kenneth