Swift 3D - программа от компании Electric Rain, призванная облегчить внедрение трёхмерных эффектов в флеш-ролики.
Swift 3D отличается от многих других 3d-редакторов своей простотой и удобством. Это тот редкий случай, когда можно не кривя душой назвать программный продукт интуитивно понятным. Правда, программа платная, но кого это может остановить :-)
Скачать Swift 3D 6-й версии можно на оффициальном сайте www.erain.com (пробная версия имеет ограниченные возможности) или здесь (пиратская версия).
Внешний вид Swift 3D v.6:
Не буду углубляться в описание работы данной программы. В рунете имеются довольно подробные инструкции по работе с Swift 3D. Кроме этого, на оффициальном сайте www.erain.com имеется раздел с обучающими материалами.
Лучше рассмотрим конкретный пример. Конечно, можно в Swift 3D создать статический трёхмерный объект, а потом добавить его в свой флеш-ролик, например, как элемент интерфейса, логотип и т.п.. Но мы сделаем наш пример более интерактивным.
Создадим новый проект в Swift 3D: File - New.
Из списка доступных примитивов кликом мышки выберем примитив Sphere. Если вы всё сделаете правильно, то данный примитив будет добавлен на рабочий стол программы.
Теперь из списка доступных материалов выберем материал с рисунком поверхности Земли и добавим его для нашего примитива (просто перетащить материал при зажатой ЛКМ на Sphere и отпустить ЛКМ).
Теперь перейдём во вкладку Animations и выберем здесь простое вращение (как и в предыдущем случае защимаем ЛКМ и перетаскиваем на объект).
Если все сделано правильно, то будут заметны изменения на временной шкале, а саму анимацию можно будет воспроизвести, нажав кнопку Play Animation.
Получилась анимация вращающейся Земли.
Затем идём во вкладку Preview and Export Editor, настраиваем экспорт и сохраняем нашу анимацию в виде swf-файла. Полученный swf-файл можно встроить в ваш флеш-проект. А можно в флеш-проекте создать мувиклип и на его временной шкале последовательно разместить кадры, полученные при работе Swift 3D (как я и сделал).
Итак, теперь в нашем флеш-ролике есть довольно реалистичная анимация 3D-объекта - Земли:
Но давайте сделаем нашу анимацию интерактивной. Пусть в нашем проекте будут две кнопки, с помощью которых пользователь сможет вращать Землю вокруг её оси. Для этого нам понадобятся:
1.) Мувиклип earth, на временной шкале которого размещены кадры с изображением Земли под разными углами зрения (их мы позаимствуем из swf-файла, сгенерированного в программе Swift 3D).
2.) Божественные кнопки с именами back и forward, которые и будут вращать Землю :-)
3.) Код ActionScript, который мы разместим на главной временной шкале флеш-ролика.
Код ActionScript 3.0:
/*
Создаём необходимые переменные.
*/
var flag:Boolean = false;
var frame:int = 1;
var n:int = 1;
/*
earth - мувик, в котором и хранятся все импортированные из Swift 3D кадры.
Останавливаем этот мувик в первом кадре.
*/
earth.gotoAndStop(frame);
/*
back и forward - кнопки, которые управляют "вращением" мувика earth.
*/
back.addEventListener(MouseEvent.MOUSE_DOWN, backMouseDown);
back.addEventListener(MouseEvent.MOUSE_UP, backMouseUp);
forward.addEventListener(MouseEvent.MOUSE_DOWN, forwardMouseDown);
forward.addEventListener(MouseEvent.MOUSE_UP, forwardMouseUp);
function backMouseDown(event:MouseEvent):void
{
flag = true;
n = -1;
}
function backMouseUp(event:MouseEvent):void
{
flag = false;
}
function forwardMouseDown(event:MouseEvent):void
{
flag = true;
n = 1;
}
function forwardMouseUp(event:MouseEvent):void
{
flag = false;
}
/*
Если переменная flag имеет значение true, то "вращаем" мувик earth в соответствующую сторону (фактически, просто переходим на определённый кадр).
*/
addEventListener(Event.ENTER_FRAME, onEnterFrame);
function onEnterFrame(event:Event):void
{
if (flag)
{
frame += n;
if (frame < 1)
{
frame = earth.totalFrames;
}
else if (frame > earth.totalFrames)
{
frame = 1;
}
earth.gotoAndStop(frame);
}
}
На языке ActionScript 2.0 это тоже можно реализовать. Код получается почти такой же и я даже не стал его комментировать.
Код ActionScript 2.0:
flag = false;
frame = 1;
n = 1;
earth.gotoAndStop(frame);
back.onPress = function()
{
flag = true;
n = -1;
};
back.onRelease = function()
{
flag = false;
};
forward.onPress = function()
{
flag = true;
n = 1;
};
forward.onRelease = function()
{
flag = false;
};
onEnterFrame = function ()
{
if (flag)
{
frame += n;
if (frame < 1)
{
frame = earth._totalframes;
}
else if (frame > earth._totalframes)
{
frame = 1;
}
earth.gotoAndStop(frame);
}
};
Вот какой результат получился у меня:
Зажмите одну из кнопок и удерживайте её в таком состоянии. Земля вращается по вашей прихоти. Что и следовало доказать.
Исходник анимированной модели Земли на ActionScript 2.0 прилагается (под Adobe Flash CS4 и выше).
Примечания
[!] У меня именно с 6-й версией возникали проблемы, когда программа начинала неправильно отображать 3d-объекты. Но это, обычно, решалось просто: создавал новый проект и заново собирал модель.