Форум 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=58932)

Gas 02.06.2004 15:42

инерция
 
товарисчи, объясните мне как - ну как же ве таки делаються таки эффектики с изминение размера мувиклипа и инерцией как на http://www.kurtnoble.com/

FreeLander 02.06.2004 17:28

Цитата:

товарисчи, объясните мне как - ну как же ве таки делаються таки эффектики с изминение размера мувиклипа и инерцией
сильно подозреваю, что ручками:)

Gas 02.06.2004 17:30

очень сильно сомневаюся ..

FreeLander 02.06.2004 17:47

OK :D , тогда чем :D :D ?!

Gas 02.06.2004 17:59

ну порграммно... ну точно не моушином ... а вот как программно?

Antares 02.06.2004 18:07

Аналогично, как делается инерция при движении тела, только вместо Скорости играемся со Scale.

Хотя можно и ручками, а уж потом подгружать внутрь нужный мувик.

FreeLander 02.06.2004 18:10

ясен пень, что программно, ну а проги-то ручками пишутся.

я не настолько крут, чтобы накидать это между делом для иллюстрации своего поста, но думаю, что ничего запредельно трудного тут нет, просто кропотливая работа - юзай классы.

ЗЫ судя по твоему сайту, не тебе спрашивать у широкой общественности "Как это, а?"

ЗЫ а вообще, изначально я пошутить пытался:)

Gas 02.06.2004 19:47

мой сайт старый... там все примимтивно сделано ...

а вот тут интересно хотя бы 1 пример как вот такие шняги делаюцца

CrazY WorM 03.06.2004 14:02

Вложений: 1
Вот на скорую руку сообразил >>>

Gas 03.06.2004 14:34

ПРОСТО НЕЧЕЛОВЕЧЕСКОЕ СПАСИБО

:D :D :D

Iv 03.06.2004 15:22

вот, побалавайся:

Код:

Object.prototype.elasticProp = function(prop, targ, friction, elasticity) {
clearInterval(this["elastic_interval"+prop]);
var t = this, step, friction = 1-(friction || arguments.callee.friction), elasticity = elasticity || arguments.callee.elasticity, intr = this["elastic_interval"+prop]=setInterval(function () {
step += (targ-t[prop])*elasticity, t[prop] += (step *= friction);
if (Math.abs(step)>.05 || Math.round(t[prop]) != Math.round(targ)) {
return;
}
t[prop]=targ, clearInterval(intr), t.onElasticPropEnd(prop, targ);
}, 10);
return intr;
};
elasticProp.friction=.3, elasticProp.elasticity=.2;
ASSetPropFlags(Object.prototype, "elasticProp", 7, 1);
/////////////////// TEST ///////////////////////
this.addSquare = function(name, depth, clr) {
var mc = _root.createEmptyMovieClip(name, depth);
mc.lineStyle(0, 0, 0), mc.beginFill(clr, 100);
mc.lineTo(100, 0), mc.lineTo(100, 100), mc.lineTo(0, 100);
mc.endFill();
return (mc);
};
mc = this.addSquare("sq0_mc", 0, 0xFF0000);
mc.onRelease = function() {
this.elasticProp("_x", random(300), Math.random()*.8+.1, Math.random()*.8+.1);
this.elasticProp("_y", random(300), Math.random()*.8+.1, Math.random()*.8+.1);
var scale = random(150)+50;
this.elasticProp("_xscale", scale);
this.elasticProp("_yscale", scale);
};

ты можешь задавать любую пропертю, не только те, что в примере и не только встроенные, но и пользовательские.

первые два аргумента обязательны
вторые два аргумента не обязательны, если их нет, то юзаются дефолтные значения. эти два агрумента должны удовлетворять условию: 0<значение<1

всех благ.

Iv 03.06.2004 15:34

еще одно забыл:
по достижению нужного результата вызывается метод onElasticPropEnd. если он задан, разумеется.
передаются два аргумента:
prop - какое свойство завершило переход на нужное значение
targ - какое это значение.

вот пример (дописать внизу):
Код:

mc.onElasticPropEnd = function(prop, targ) {
if (prop == "_x" || prop == "_y") {
this.elasticProp(prop, random(300), Math.random()*.8+.1, Math.random()*.8+.1);
}
};


Iv 03.06.2004 18:20

иногда flash подлюка плохо считает.
добавил ограничитель циклов (argument: max, default:250).
и возможность изменения времени интервала (argument: speed, default:20)

в итоге:

Код:

Object.prototype.elasticProp=function (prop, targ, friction, elasticity, max, speed) {
        var obj = this.elastic_prop_obj=(this.elastic_prop_obj || {}), t = ASSetPropFlags(this, "elastic_prop_obj", 7, 1), t = clearInterval(obj[prop]), friction = 1-(friction || arguments.callee.friction), elasticity = elasticity || arguments.callee.elasticity, max = max || arguments.callee.max, t = this, step, intr = obj[prop]=setInterval(function () { (--max && (Math.abs(step)>.05 || Math.round(t[prop]) != Math.round(targ))) ? (step += (targ-t[prop])*elasticity, t[prop] += (step *= friction)) : (t[prop]=targ, clearInterval(intr), delete obj[prop], t.onElasticPropEnd(prop, targ));}, speed || 20);
        return intr;
}, Object.prototype.elasticProp.friction=.3, Object.prototype.elasticProp.elasticity=.2, Object.prototype.elasticProp.max=250, ASSetPropFlags(Object.prototype, "elasticProp", 7, 1);
/////////////////// TEST ///////////////////////
this.addSquare = function(name, depth, clr) {
        var mc = _root.createEmptyMovieClip(name, depth);
        mc.lineStyle(0, 0, 0), mc.beginFill(clr, 100), mc.moveTo(-50, -50), mc.lineTo(50, -50), mc.lineTo(50, 50), mc.lineTo(-50, 50), mc.endFill();
        return (mc);
};
mc = this.addSquare("sq0_mc", 0, 0xFF0000);
mc1 = this.addSquare("sq1_mc", 1, 0x00FF00);
mc2 = this.addSquare("sq2_mc", 2, 0x0000FF);
//
mc.onRelease = mc1.onRelease=mc2.onRelease=function () {
        this.onElasticPropEnd("_x"), this.onElasticPropEnd("_y");
        this.onElasticPropEnd("_xscale"), this.onElasticPropEnd("_yscale");
        this.onElasticPropEnd("_alpha");
};
mc.onElasticPropEnd = mc1.onElasticPropEnd=mc2.onElasticPropEnd=function (prop) {
        this.elasticProp(prop, random(100)+10, Math.random()*.8+.1, Math.random()*.8+.1, 200, 30);
};
delete mc, delete mc1, delete mc2;


dimarik 03.06.2004 18:58

А ты Sothink'ом напару с ASV 4 его просмотри, да не забудь про Imperator Fla ;) Делов-то часа на четыре-пять

Whatsername 03.06.2004 21:01

2 BitSky: супер! оч клева, вся подноготная http://www.robertreich.de/

opex 04.06.2004 02:33

Код:

_root.createEmptyMovieClip("sor", -1);
with (_root.sor) {
        lineStyle(0, 0x000000, 100);
        beginFill(0x999999, 100);
        moveTo(0, 0);
        lineTo(25, 0);
        lineTo(25, 25);
        lineTo(0, 25);
        lineTo(0, 0);
        endFill();
}
_root.sor._visible = 0;
var T = -0.09, A = 0.03;
for (i=0; i<5; i++) {
        duplicateMovieClip(_root.sor, "obj"+i, i);
        _root["obj"+i]._x = 20+(i*30);
        _root["obj"+i]._y = 10;
        _root["obj"+i].width_s = 25;
        _root["obj"+i].sw = 0;
        _root["obj"+i].height_s = 25;
        _root["obj"+i].sh = 0;
}
_root.onMouseDown = function() {
        for (i=0; i<5; i++) {
                if (_root["obj"+i].hitTest(_root._xmouse, _root._ymouse)) {
                        _root["obj"+i].width_s = 200;
                        _root["obj"+i].height_s = 200;
                        _root["obj"+p].width_s = 25;
                        _root["obj"+p].height_s = 25;
                        p = i;
                }
        }
};
_root.onEnterFrame = function() {
        for (i=0; i<5; i++) {
                _root["obj"+i]._x = _root["obj"+(i-1)]._x+_root["obj"+(i-1)]._width+5;
                _root["obj"+i]._width += _root["obj"+i].sw += T*_root["obj"+i].sw+A*(_root["obj"+i].width_s-_root["obj"+i]._width);
                _root["obj"+i]._height += _root["obj"+i].sh += T*_root["obj"+i].sh+A*(_root["obj"+i].height_s-_root["obj"+i]._height);
                updateAfterEvent();
        }
};

Так накидал по пыренькому может подойдёт

FreeLander 04.06.2004 15:46

клёво


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

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