Просмотр полной версии : Помогите реализовать очень плавное и медленное вращение большого обьекта.
Nuclear_soul
07.11.2007, 00:52
Всем привет.
Сразу оговорюсь что я нашел подобную тему на этом форуме, но описанный там способ меня не устраивает, об этом чуть ниже.
Задача состоит в следующем: очень большая шестеренка 4000 х 4000 пикселей, должна очень медленно и плавно, едва заметно вращаться вокруг своей оси с частотой 24 фпс. В кадре видна лишь ее малая часть с зубцами.
На форуме нашел 2 варианта:
onClipEvent (enterFrame) {
_rotation=+0.1;
}
_root.onEnterFrame = function() {
this.mc._rotation -= 0.1;
};
в обоих случаях вращение дерганое, и нифига не медленное.
Но первое что пришло на ум это сделать без скриптов, задав вращение для моушен твина. Задаю один поворот за 3000 кадров - всеравно все дергается.
Меня возможно, устроил бы вариант с получением короткой раскадровки вращения, скажем на 10 кадров, получился бы сэмпл, шестеренка ведь однородная, но как получить эту раскадровку непонятно, ведь моушен твин не дает нужной частоты "как ни крути". Впрочем хотелось бы иметь оба варианта в распоряжении, потому что если не делать семпл, то на поверхность щестеренки можно что-то поместить, а если делать семпл то сократится размер... наверное...
Вообщем картина такая, буду признателен за помощь.
Остается добавить следующие данные:
Шестеренка отрисована в иллюстраторе (CS3).
Флеш тоже CS3
fla исходник прилагаю (в 8й версии):
Заранее спасибо.
как вариант: тело(сам круг) оставить в покое, а двигать зубцы по кругу..
сколько и как подбирать надо, но это детали..
а c _rotation действительно беда: перерисовывает когда захочет..
aQuestion
07.11.2007, 02:29
а апдейтАфтерЭвент не помогает? эдит: посмотрел вложение и понял, что нет. видимо, у _ротейшн лимитэд резолюшен.
Nuclear_soul
07.11.2007, 02:30
Ооо... спасибо брат, буду разбираться... ибо познания в экшенах мои весьма скудны... может посоветуешь мне с чего начать в осмысление всех этих var'ов ?
А куда спрятан сам клип с зубцом? Какую роль играет клип с кругом?
Если не сложно, объясни конструкцию?
а апдейтАфтерЭвент не помогает?
А по подробнее? Куда и что прописать.
Molecula
07.11.2007, 03:02
Там нет зубчатого колеса,...там прямоугольники атачатся, ну, размножаются по окружности и крутятся.
Шестеренка слишком большая, сам объект большой для вращения.
Nuclear_soul
07.11.2007, 03:18
То что там нет зубчатого колеса, я понимаю, мне интересно как сам скрипт работет. Где в скрипте указан радиус вращения? и точка вокруг которой они(размноженные зубчики) вращаются, как их синхронизировать с кругом?
как вариант: тело(сам круг) оставить в покое, а двигать зубцы по кругу..
сколько и как подбирать надо, но это детали..
а c _rotation действительно беда: перерисовывает когда захочет..
Угу, если честно, то лучше такое вручную заанимировать (меняя продолжительность анимации). К сожалению, это правда, дискретность у вращения недостаточная для того, чтобы создать "красивую" анимацию. Но можно попробовать поиграться - поискать более-менее приемлимый результат.
Т.е. ты пытаешься менять поворот на 0.1 градус, а технически флеш в состоянии отрисовать повороты с точностью до 0.3 градуса (поэтому же апдейтАфтерИвент и тому подобные ухищрения не спасут).
То что там нет зубчатого колеса, я понимаю, мне интересно как сам скрипт работет. Где в скрипте указан радиус вращения? и точка вокруг которой они(размноженные зубчики) вращаются, как их синхронизировать с кругом?
var zArr=[];//массив для мувикоа-зубцов
var fi0=0;//с какого угла начинаем расставлять
var dfi=Math.PI/128;//угол между зубцами
var x=circle._x;//координаты центра
var y=circle._y;
var r=circle._width/2;//радиус
//плодим сколько-то зубцов
for(var i=0;i<48;i++){
var z= this.attachMovie("z","z"+i,i);
z.fi=fi0-i*dfi;//определяем каждому сдвиг по углу
zArr.push(z);//кладем в массив
}
//крутим
var fi=0;//текущий общий угол поворота
function onEnterFrame(){
for(var i=0;i<zArr.length;i++){
var z=zArr[i];//зубец
var a=z.fi+fi;//его персональный угол
if(a<-Math.PI/2)z.fi+=Math.PI/2;//как уходит за какой-то предел, возвращаем назад
z._x=x+r*Math.cos(a);//ставим куда положено
z._y=y+r*Math.sin(a);
z._rotation=180/Math.PI*a;
}
fi-=0.00005;//меняем общий угол
}
aQuestion
07.11.2007, 10:08
Т.е. ты пытаешься менять поворот на 0.1 градус, а технически флеш в состоянии отрисовать повороты с точностью до 0.3 градусабольше похоже на 0.25 (0.3 все-таки немного дергается), хорошо бы найти точно на adobe.com
Кстати, можно тогда написать нечто вродеupdateGear = function() {
_root.g._rotation -= 0.25; updateAfterEvent ();
};
// virtual "fps" we want for 1 degree rotation
var vfps = 6.0;
setInterval (updateGear, 0.25 * 1e3 / vfps);скачки останутся, но будут более равномерные.
chingachgoog
07.11.2007, 11:16
Не надо никакого скрипта вообще тут. И шестеренки гигантской не надо.
Надо всего лишь несколько кадров видимой части шестеренки (простая тупая анимация со сменой кадров) - остальное отрезать нафиг - только тогда тормозить не будет.
Nuclear_soul
07.11.2007, 13:16
Спасибо всем за то что откликнулись. Мне больше всего нравится вариант silin'а так как в итоге он весит меньше всего, да и как-то приятнее когда на скрипте все сделано. Теперь, с комментариями в коде, я думаю разберусь. Ну или в крайнем случае и вправду сделаю раскадровку.
Nuclear_soul
07.11.2007, 17:50
Решил таки сделать покадровую анимацию, и опять проблемы.
Почему когда я врашяю обьект фри трансформом, он как-то скачет относительно центра? А когда я в опциях задаю ему ротейт на допустим 0.07 градусов, то происходит то же самое, с каждым градусом происходит изменение размера и X Y координат... странно что функция называется ротейт энд скейл, а где тогда тупо ротейт? хотя скейл стоит 100% поидее ничего меняться не должно... Тоесть я просто жму F6 потом Ctrl + Alt + C (ротэйт энд скэйл) потом энтр. и так много раз, и в итоге с каждым кадром вместо того чтобы просто врашаться обьект еше и изменяет свою форму и позицию странно ейбогу... если руками потом поставить размеры на место то все вращается как надо, но это издивательство какое-то... =(((((((((((
PS
Вопрос не по скриптам, но не отдельную же тему создавать ейбогу.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.