Я пытаюсь найти лучший способ повернуть контейнер (или что-то еще в этом отношении), используя функции matrix3D во flash 10 для гибкости.
Мне удалось заставить контейнер вращаться вокруг точки, которая не является его точкой регистрации, но я справился с этим, только отключив обрезку на контейнере, а затем поместив содержимое в другое место, кроме (0,0,0). Это работает, но не очень интуитивно понятно и отстой, когда вы пытаетесь разместить несколько элементов или даже если вам нужно переместить точку вращения.
Использование класса matrix3D кажется правильным решением, но я не уверен, как именно.
Ваше здоровье
Дополнительная информация. Если мой контейнер находится в точке (0,0,0) на сцене, и я хочу повернуться вокруг средней координаты X контейнера, я перевожу на container.width / 2 для X, затем снова вращаю и перевожу обратно. Это прекрасно работает. НО, если мой контейнер находится в (10, 0, 0), то, если я переведу то же самое, что и выше, и добавлю дополнительные 10, это не сработает.
Soloution (это полная чушь - объясните, если можете). Как было предложено, вам нужно перевести, повернуть, а затем -traslate. Я знал это, но это никогда не работало.
НО, посмотрите решение ниже, я не понимаю. (панель - это объект, который я вращаю, я вызываю функцию both ())
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);
}