Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   вращение вокруг оси! (http://www.flasher.ru/forum/showthread.php?t=113666)

Alex_beginner 07.07.2008 16:14

Вложений: 1
Здравствуйте Форумчание!
Здравствуйте shaltay!

Есть еще один вариант помимо _rotation класса MovieClip - использование класса Matrix.

Для этого Вы должны создать пять матриц:

1. матрица, определяющая мировую систему координат - mat_wrld;
2. матрица, определяющая радиус вращения - (mat_tmp и mat_wrld).
3. матрица, определяющая положение центра вращения - mat_translate.
4. матрица, определяющая угол вращения - mat_rotate.

Далее после подготовки всех матриц и выполнения необходимых умножений (конкатинаций матриц) устанавливаете значение свойства объекта transform.matrix равным полученной матрице и объект трансформируется.

Вот так выглядит код с использованием Matrix:

Код:

import flash.geom.Matrix;

var mat_rotate:Matrix = new Matrix();// создаем матрицу вращения
var mat_translate:Matrix = new Matrix();// создаем матрицу смещения по осям, задающая положение центра вращения
var mat_wrld:Matrix = new Matrix();//создаем мировую матрицу
var mat_tmp:Matrix = new Matrix();//временная матрица, используемая для хранения первоначальной мировой матрицы
mat_tmp.translate(120,0);//Задаем смещение объекта относительно центра вращения - радиус вращения
mat_translate.translate(250,250);//Задаем положение центра вращения
var A :Number = 0; //Задаем начальный угол

this.onEnterFrame = function():Void
{
        mat_wrld = mat_tmp.clone();//клонируем временную матрицу в мировую матрицу
        angle_rad = A*Math.PI/180;//рассчитываем угол в радианах по градусам
        mat_rotate.identity();//Очищаем матрицу вращения
        mat_rotate.rotate(angle_rad);//задаем матрицу вращения
        mat_wrld.concat(mat_rotate);//умножаем матрицы (конкатинация) мировую и вращения
        mat_wrld.concat(mat_translate);//умножаем матрицы мировую и смещения
        myClip.transform.matrix = mat_wrld;//трансформируем объект myClip
        A = A+1;//увеличиваем угол

Во вложении пример. Если, что не понятно пишите. Если хотите изучить вопрос глубже изучайте документацию по DirectX, а также хелп Флеша.

RAlfDog 10.07.2008 20:40

Цитата:

Сообщение от shaltay (Сообщение 750496)
ну так а как центрировать-то??

Выберите таймфрейс вашего мувика ("зайдите" в свой клип), выделите всё содержимое, сгруппируйте его. А потом нажмите "Align horisontal center" и "Align vertical center" (это там, справа, панелька "Align&Info&Transform"), и не забудьте включить кнопку "To Stage:" .

Helavin 11.09.2008 11:45

о! сэнькс, мне тоже помогло (похожая задачка с пропеллером была)


Часовой пояс GMT +4, время: 11:55.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.