Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   Как плавно сделать анимацию ?? (http://www.flasher.ru/forum/showthread.php?t=52830)

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

Вложений: 1
а я бы покрасил в зеленое :)
Код:

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
Круто, а я не знал, что так моно:)


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

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