Вращение ActionScript на 2 оси отличается от 1 оси
У меня есть 2 DisplayObject, один из которых содержит другой, как код ниже:
var sprite1:Sprite = new Sprite();
sprite1.addChild(loader1); // assume that I have load picture on to loader1
loader1.rotationZ = 30;
sprite1.rotationZ = -30; Если я выполню код выше, изображение на loader1 будет выглядеть так, как будто оно вообще не вращалось, потому что его контейнер вращается в противоположном направлении. Что правильно, как я и ожидал.
Но, если бы у меня было несколько осей вращения в коде:
loader1.rotationZ = 30;
loader1.rotationY = 50;
sprite1.rotationZ = -30;
sprite1.rotationY = -50;
Теперь loader1 будет вращаться под другим углом. Мой вопрос: почему это не компенсирует друг друга? Обратите внимание, что позиции x,y,z в loader1 и sprite1 находятся в 0,0,0. И эта проблема возникает независимо от поворота X, Y или Z. Если у вас есть 1 ось, она работает нормально. 2 оси, это не так.
Я публикую этот пример кода, потому что я пытаюсь понять, как Flash вращается в 3D. В документе AS3 утверждается, что он вращается вокруг своего "родительского контейнера 3D". Что это?
1 ответ
Поворот относительно родительского, и когда вы поворачиваете родительский объект, он меняет систему координат для дочернего объекта. Это не имеет значения, когда вы вращаетесь только вокруг одной оси, но имеет значение, когда вы вращаетесь вокруг двух. Чтобы отменить повороты, вы должны отменить все из них в обратном порядке, в котором они были применены.
Попробуйте сделать это с книгой или телефоном, поворачивая на 90 градусов по одной оси, а затем по второй. Вы не можете вернуться к тому, с чего начали, и вы всегда будете задействовать третью ось.