Просмотр полной версии : инерция
товарисчи, объясните мне как - ну как же ве таки делаються таки эффектики с изминение размера мувиклипа и инерцией как на http://www.kurtnoble.com/
FreeLander
02.06.2004, 17:28
товарисчи, объясните мне как - ну как же ве таки делаються таки эффектики с изминение размера мувиклипа и инерцией
сильно подозреваю, что ручками:)
очень сильно сомневаюся ..
FreeLander
02.06.2004, 17:47
OK :D , тогда чем :D :D ?!
ну порграммно... ну точно не моушином ... а вот как программно?
Аналогично, как делается инерция при движении тела, только вместо Скорости играемся со Scale.
Хотя можно и ручками, а уж потом подгружать внутрь нужный мувик.
FreeLander
02.06.2004, 18:10
ясен пень, что программно, ну а проги-то ручками пишутся.
я не настолько крут, чтобы накидать это между делом для иллюстрации своего поста, но думаю, что ничего запредельно трудного тут нет, просто кропотливая работа - юзай классы.
ЗЫ судя по твоему сайту, не тебе спрашивать у широкой общественности "Как это, а?"
ЗЫ а вообще, изначально я пошутить пытался:)
мой сайт старый... там все примимтивно сделано ...
а вот тут интересно хотя бы 1 пример как вот такие шняги делаюцца
CrazY WorM
03.06.2004, 14:02
Вот на скорую руку сообразил >>>
ПРОСТО НЕЧЕЛОВЕЧЕСКОЕ СПАСИБО
:D :D :D
вот, побалавайся:
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
всех благ.
еще одно забыл:
по достижению нужного результата вызывается метод 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);
}
};
иногда 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;
А ты Sothink'ом напару с ASV 4 его просмотри, да не забудь про Imperator Fla ;) Делов-то часа на четыре-пять
Whatsername
03.06.2004, 21:01
2 BitSky: супер! оч клева, вся подноготная http://www.robertreich.de/
_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
клёво
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.