PDA

Просмотр полной версии : Как плавно сделать анимацию ??


megmage
18.12.2003, 10:30
Я аттачментом всталяю мувик и прописыванию для него события при наезде на него мышью:

Mc01.onRollOver = function () {
for (i=0;i <=20;i++){
setProperty(Mc01,_xscale,100+i);
setProperty(Mc01,_yscale,100+i);
}
}

т.е. изменение масштаба при ролловере.
Т.к. расчет происходит в одном фрейме - то изменения происходят сразу со 100% на 120%.

Подскажите пожалуста как мне написать код чтобы изменение проиходило плавно??

best regards megmage

Dimonius
18.12.2003, 13:50
Через интервалы.

setInterval()

opex
18.12.2003, 14:42
зачем же так сложно юзай onEnterFrame

i = 1;
_root.onEnterFrame = function() {
if (_root.but.hitTest(_xmouse, _ymouse, true)) {
if (_root.but._xscale<=120) {
_root.but._xscale += i;
_root.but._yscale += i;
}
} else {
if (_root.but._xscale>=100) {
_root.but._xscale -= i;
_root.but._yscale -= i;
}
}
};
создай на руте мув под именем but и швырни этот код в первый кадр

megmage
18.12.2003, 16:01
2 Dimonius - я пробовал через setInterval неработает или кривые руки мешают мне сделать правильно :)

2 OPEX - понимаешь мне надо сделать именно на RollOver и RollOut == конечно можно сделать по замороченно через createEmptyMovieClip и добавить в него функцию изменения масштаба, а потом на RollOver просто поменять клипы местами.. хотелось всё сделатьв один приход)

opex
18.12.2003, 16:22
ну если не можеш через интервалы то можно конечно придумать и чтото типо этого

p = 0;
_root.but.onRollOver = function() {
p = 1;
};
_root.onEnterFrame = function() {
if (_root.but._xscale<=120 && p == 1) {
_root.but._xscale += 1;
_root.but._yscale += 1;
}
};

2K WebStudio
18.12.2003, 16:25
Знаешь, мрожет я ничего и не понимаю, но может тебе помогут эти комментарии:)))
i = 1;
_root.onEnterFrame = function() {
if (_root.but.hitTest(_xmouse, _ymouse, true)) {
//Этот оператор if смотрит, на клипе мышка, или нет!!!
if (_root.but._xscale<=120) {
//Если да, то он проверяет, масштаб мувика на <=120!
_root.but._xscale += i;
_root.but._yscale += i;
//И меняет масштаб, если меньше 120!
}
} else {
//Если мышка не на клипе, то он доводит масштаб до 100!!!
if (_root.but._xscale>=100) {
_root.but._xscale -= i;
_root.but._yscale -= i;
}
}
};

Вот только одного не пойму!
Нет, чтобы попробовать вставить!!!

opex
18.12.2003, 16:29
2K WebStudio я бы даже сам так не смог :)

Nox Noctis
18.12.2003, 16:51
а я бы покрасил в зеленое :)
MovieClip.prototype.scaleTo = function(scale) {
var step = (scale-this._xscale)*.1;
this._xscale += step;
this._yscale = this._xscale;
return Math.abs(step)>.1;
};
mc.onRollOver = function() {
this.onEnterFrame = function() {
if (!this.scaleTo(150)) {
delete this.onEnterFrame;
}
};
};
mc.onRollOut = function() {
this.onEnterFrame = function() {
if (!this.scaleTo(100)) {
delete this.onEnterFrame;
}
};
};

Nox Noctis
18.12.2003, 16:57
или можно еще так сделать:
MovieClip.prototype.scaleTo = function(scale) {
this.scaleTo.scale = scale;
this.onEnterFrame = function() {
var step = (this.scaleTo.scale-this._xscale)*.1;
this._xscale += step;
this._yscale = this._xscale;
if (Math.abs(step)<.1) {
delete this.onEnterFrame;
}
};
};
mc.onRollOver = function() {
this.scaleTo(150);
};
mc.onRollOut = function() {
this.scaleTo(100);
};так пользоваться попроще, но MovieClip.scaleTo тогда не такая универсальная

opex
18.12.2003, 16:57
загнул однако

Nox Noctis
18.12.2003, 17:01
не загнул, а предложил цивильное решение.. :)

если надо, мона сделать увеличение без замедления - это уже на усмотрение автора :)

opex
18.12.2003, 19:30
ну хотябы полегче сделал ато сразу портотипы итд итп
ну как нибуть так


function sc(s) {
onEnterFrame = function () {
but._xscale += (s-but._xscale)/5;
but._yscale = but._xscale;
};
}
but.onRollOver = function() {
sc(150);
};
but.onRollOut = function() {
sc(100);
};

opex
18.12.2003, 19:38
не исходник который был до этого слишком уского профиля вот так еще лудьше


function sc(scale, target) {
onEnterFrame = function () {
target._xscale += (scale-target._xscale)/5;
target._yscale = target._xscale;
};
}
but.onRollOver = function() {
sc(150, _root.but);
};
but.onRollOut = function() {
sc(100, _root.but);
};

Nox Noctis
18.12.2003, 19:49
через прототип это узко, да ? :) теперь это так называется ? :)

и ты сделал ничуть не легче, только убрал удаление онЕнтерФрейма, которое грамотнее было бы оставить

opex
19.12.2003, 00:33
нет я имел в виду свой скрипт узким вот этот
function sc(s) {
onEnterFrame = function () {
but._xscale += (s-but._xscale)/5;
but._yscale = but._xscale;
};
}
but.onRollOver = function() {
sc(150);
};
but.onRollOut = function() {
sc(100);
};

opex
19.12.2003, 00:39
а начто влияет
delete this.onEnterFrame;

Nox Noctis
19.12.2003, 01:54
на то что он не будет работать "вхолостую", когда шаг (s-but._xscale)/5; станет близким к нулю. он просто выключится, когда дойдет до нужного масштаба

megmage
19.12.2003, 10:25
:) Всем спасибо за советы ))) Кажись у меня получилось :)

best regards megmage

2K WebStudio
19.12.2003, 15:42
Math.abs(step)<.1
Круто, а я не знал, что так моно:)