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