PDA

Просмотр полной версии : 2Artem Melnikov и понимающие :) Запара ВЕЛИКА


believe
13.11.2001, 17:40
В топике о панораме 16-09 от ManOwaR господином Артемом Мельниковым был дан адрес с примером. Так вот, с тех пор он мне покоя и не дает. Господа продвинутые флешеры, разжуйте пожалуйста скрипт (работу функции) из этого файла. Суть проиходящего - движение мувиков, организованное по кругу (псевдопанорама) ускоряется в зависимости от движения мыши. Вот файл и тот самый его код:

movieclip.prototype.move = function(xmitte, ymitte, radiusx, radiusy) {
if (_y>ymitte) {
distance = _y-ymitte;
} else {
distance = ymitte-_y;
}
//
if (_root._ymouse<ymitte) {
ypos = ymitte-_root._ymouse;
} else {
ypos = _root._ymouse-ymitte;
}
//
speed = ypos/20;
if (ypos>100) {
speed = 5;
}
//
if (_root._ymouse<ymitte) {
if (winkel<(360-speed)) {
winkel += speed;
} else {
winkel = 0;
}
} else {
if (winkel>(-360+speed)) {
winkel -= speed;
} else {
winkel = 0;
}
}
//
if (winkel>0 && winkel<=180) {
_xscale = 100-(distance/10*4);
_yscale = 100-(distance/10*4);
_alpha = 100-(distance/10*3);
} else if (winkel>180 && winkel<=360 || winkel<0 && winkel>= -180) {
_xscale = 60-((100-distance)/10*3);
_yscale = 60-((100-distance)/10*3);
_alpha = 50-((100-distance)/10*5)
} else if (winkel>-360 && winkel<=-90) {
_xscale = 100-(distance/10*4);
_yscale = 100-(distance/10*4);
_alpha = 100-(distance/10*3);
}
//
_x = xmitte+Math.sin(winkel*Math.PI/180)*radiusx;
_y = ymitte-Math.cos(winkel*Math.PI/180)*radiusy;
}

believe
14.11.2001, 16:59
Никто не знает ... Жаль :( Мучения продолжаются

believe
14.11.2001, 17:11
Пропавший файл

Artem Brigert
15.11.2001, 13:57
Ja poprobuju tebe perewesti rasjasnenija s nemezkogo na russkij, tam w ishodnike wrode objasnjaetsja tschto k tschemu. No nemnogo posje :) Sorry net wremeni sejtschas

Artem

Artem Brigert
15.11.2001, 15:20
Привет,
Объяснений там не оказалось, но чем могу помогу.
Mitte= центр(нем)
Winkel= угол(нем)
Radius= радиус
Speed= скорость
Distance= дистанция
Может так разберёшся что к чему.

Артём

K_L
16.11.2001, 02:57
Poprobuem rayobrat|sja (proshu proshtshenija ya latinicu... :( )

movieclip.prototype.move = function(xmitte, ymitte, radiusx, radiusy) {
// Perevod: Otnyne vse ob''ekty tipa MovieClip budut obladat’
// takzhe i metodom "move()", prinimajushtshim parametry:
// xmitte, ymitte, radiusx, radiusy;
// intuitivno predpolozhim, chto xmitte i ymitte– x/y-koordinaty
// nekoego centra, otnositel’no kotorogo budet idti vrashtshenie,
// radiusx, radiusy - parametry vrashtshenija, sm. nizhe.
// Sut’ metoda "move" takova
if (_y>ymitte) {
// esli y-koord. ob’’ekta bol’she y-koord. centra vrashtshenija,
// to sozdaem peremennuju distance,
distance = _y-ymitte;
// ravnuju raznice mezhdu y-koord. ob’’ekta i y-koord. etogo cenrta.
} else {
// v protivnom sluchae (esli y-koordinata ob’’ekta men’she
// ili ravna y-koordinate centra) distance vyschityvaetsja naoborot
// i vse ravno ostaetsja >=0. Distance, takim obr.,
// eto rasstojanie mezhdu vertikal’nym polozheniem
// ob’’ekta tipa MovieClip
// i predpolagaemogo centra ego vrashtshenija
distance = ymitte-_y;
}

if (_root._ymouse<ymitte) {
// esli vertikal’noe polozhenie myshi men’she
// vertikal’nogo polozhenija
// centra (to est’ mysh’ nachoditsja vyshe),
ypos = ymitte-_root._ymouse;
// sozdaem peremennuju ypos, ravnuju raznice
// mezhdu y-koord. myshi i centra vrashtshenija;
} else {
ypos = _root._ymouse-ymitte;
// etot parametr toze >=0
}
speed = ypos/20;
// peremennaja speed – tipa, skorost’ :)
// Ravna 1/20 poluchennoj vyshe
// peremennoj ypos, t.e.: chem bol’she raznica
// mezhdu vertikal’nym
// polozheniem myshi i polozheniem centra vrashtshenija klipa,
// tem bol’she speed.
if (ypos>100) {
// No pri etom speed ne mozhet prevyshat’ 5,
// dazhe esli ypos > 100,
// t.e., po "osnovnomu" pravilu, speed dolzhen by stat’ bol’she 5.
// Takim obrasom, nachinaja s kakoj-to kriticheskoj raznicy
// po vertikali speed povyshat’sja bol’she ne budet.
speed = 5;
}
if (_root._ymouse<ymitte) {
if (winkel<(360-speed)) {
// esli mysh’ vyshe centra vrashtshenija i peremennaja winkel
// men’she (360 – speed) (a pri pervoj proverke
// winkel = 0 - sm. nizhe),
winkel += speed;
// to narastit’ znachenie peremennoj na vychislennuju
// velichinu speed.
// Winkel, kak bylo skazano, znachit "ugol".
} else {
// a esli peremennaja winkel < 360
// (t.e.: pribaviv speed + winkel mozhno poluchit’ velichinu,
// bol’shuju ili ravnuju 360),
winkel = 0;
// to obnulit’ winkel
}
} else {
// nu a esli mysh’ ne vyshe centra vrashtshenija klipa, to
if (winkel>(-360+speed)) {
// (ta zhe istorija, chto vyshe, no idet ne pribavlenie,
// a vychitanie, t.e. tipa povorot v druguju storonu).
winkel -= speed;
} else {
winkel = 0;
}
}

// Aga, vot pojavljajutsja nakonec standartnye parametry:
// _xscale, _yscale, _alpha i vstupaet v igru chisto
// "geometricheskaja" logika.
// Esli winkel nakhoditsja mezhdu ]0, 180],
if (winkel>0 && winkel<=180) {
// to: umen’shit’ linejnye razmery klipa proporcional’no distance
// (t.e. raznice mezhdu vertikal’nym polozheniem klipa
// i centra vrashtshenija)
_xscale = 100-(distance/10*4);
_yscale = 100-(distance/10*4);
// i proporcional’no zhe umenit' alphu
_alpha = 100-(distance/10*3);
} else if (winkel>180 && winkel<=360 || winkel<0 && winkel>= -180) {
// esli winkel lezhit mezhdu ]180, 360] ili [-180, 0[,
// to razmery i alpha klipa menjajutsja po drugomu pravilu:
_xscale = 60-((100-distance)/10*3);
_yscale = 60-((100-distance)/10*3);
_alpha = 50-((100-distance)/10*5)
} else if (winkel>-360 && winkel<=-90) {
// nakonec, esli winkel lezit mezhdu ]-360, -90],
// to - opjat’ kak v pervom sluchae
// (ne ponimaju, pochemu nado bylo raspisyvat’ eto otdel’no)
_xscale = 100-(distance/10*4);
_yscale = 100-(distance/10*4);
_alpha = 100-(distance/10*3);
}


// Fokus-pokus! V moem detstve eto nazyvalos’ trigonometriej.
// I s tekh por, uvy, moi znanija v etoj oblasti
// na etom i zakanchivajutsja ...$(
// Po krajnej mere, nakonec-to pojavljajutsja preslovutye
// radiusx i radiusy.
// Polozhenie objekta po vertikali i po gorizontali privjazyvaetsja
// k etim parametram i k polozheniju uslovnogo centra povorota.
_x = xmitte+Math.sin(winkel*Math.PI/180)*radiusx;
_y = ymitte-Math.cos(winkel*Math.PI/180)*radiusy;
}


V tret’em kadre osnovnogo fil’ma sgruppirovano 18 klipov: eto kopii objekta "textfield" ("tekstovoe pole") iz biblioteki. (Po suti, eto prosto dinamicheskij tekst "text" v ramke.)
Dlja kazhdogo iz etikh klipov propisany actions:

onClipEvent (load) {
this.text = "lunatic"
// ili drugoe imja
winkel = 0;
// statrtovyj ugol
}
onClipEvent (enterFrame) {
move(364, 199, 0, 100);
// kazhdyj raz pri pojavlenii klipa s tekstom vyzyvaetsja metod
// move(364, 199, 0, 100).
// Etot metod, sobstvenno, kazhdyj raz ocenivaet polozhenie
// klipa na stranice i polozhenie myshi i sootvetstvenno menjaet
// koordinaty, razmery i jarkost’ klipa. Razumeetsja, dlja
// kazhdogo klipa zdes’ metod move() vyzyvaetsjas
// odnim i tem zhe naborom parametrov - chto natalkivaet
// na ochevidnuju ideju o vozmozhnoj optimizacii.
// Mozhno bylo by attachit’. Eto odnoznachno!
}

NADO BY:
1. Poeksperimentirovat' s parametrami metoda move();
2. Poprobovat' peredelat' ego dlja vrashtshenija po _gorizontali_
... da spat' khochetsja, vstavat' zavtra rano :mad:

Uspekhov!

K_L
16.11.2001, 11:45
Vazhnoe dobavlenie:
Kazhdomu "tekctovomu" muviku v tret'em kadre prisvoeno svoe startovoe znachenie winkel (0, 20, 40...):
imenno blagodarja etomu oni i stanovjatsja srazu kazhdyj na svoe mesto!!!
Eto ja uhe prospal :D

believe
16.11.2001, 15:25
Огромный сеньк Особенно K_L (Ну очень постарался) :) И не лень же было Вот сижу перевариваю и, видимо, еще долго буду :)

K_L
16.11.2001, 16:26
;)

K_L
16.11.2001, 17:36
Metod dejstvitel'no och. tolkovyj.
Dlja nachala, izmenim ego nemnogo (iskljuchitel'no dlja prostoty):

pervuju stroku zamenim na:

movieclip.prototype.move = function() {

xmitte=120;
ymitte=120;
radiusx=0;
radiusy=100;

(Teper' metod vyzyvaetsja bez parametrov, kotorye zhestko opredeljajutsja v nem samom.)

Sootvetstvenno na muvikakh v tret'em kadre tozhe nado pomenjat' vyzov move()-metoda: vykinut' parametry iz skobok. Teper', po krajnej mere, eksperimentirovat' s izmeneniem parametrov mozhmo centralizovanno.

Napr., posmotri, chto poluchaetsja, kogda radiusy!=0; kogda radiusx>radiusy. I chto, kogda eti znachenija umen'shajutsja/uvelichivajutsja - i t.d.

Tolkovo.

Kstati, esli ostavit' metod movie() s parametrami, to ikh mozhmo budet potom menjat'! :eek:

Artem Brigert
18.11.2001, 16:10
Посмотри на
www.d-art.ch
там много толковых исходников

K_L
19.11.2001, 16:04
2 Artem Melnikov

Aga, spasibo.

Oni tam dejstvitel'no...

Tol'ko kakie-to mekhanicheskie uzh ochen'.

A na televizore moj IE prosto tikho povis :) Potom otvis, pravda, no ja ot grekha smotalsja poskoree, a to starik explorer - on takoj, kak povisnet... Tak i boltaetsja. ;)

believe
19.11.2001, 18:47
2Artem Melnikov
примеры, действительно, офигенные, за них тебе огромное флешерское спасибо :)
2 K_L
Спасибо, что поковырялся, но неясности гораздо глубже - где какие действия производятся - это понятно. По аналогии для оси х уже все давно сделано - мне это и надо было, а хотелось бы досконально понять суть. Например почему speed !вычитается! из 360 и зачем синус и косинус, а также PI*180, когда речь идет не об угле (winkel- не есть настоящий угол, выраженный в радианах и связанный со свойством _rotation объекта, это численно совпадающая с ним величина)- почему было не поставить такой-же коэффициент да и откуда взяты остальные коэффициенты... Тоже непонятно ...

K_L
20.11.2001, 12:16
2believe
Ja tak ponjal.
Eto takaja karusel' u nikh sdelana, a winkel, pokhozhe, eto vse-taki ugol - povorota "loshadki" otnositel'no "osi" karuseli. Poskol'ku loshadki sidjat na kruge, to kogda oni peremeshtshajutsja, ikh razmery menjajutsja nelinejno, a po trigonometricheskim funkcijam. Speed - eto prirashtshenie winkel-"ugla".
Postupila ideja - pereimenowat' pole dinamicheskogo teksta v 'winkel' i posmotret', chto budet...

believe
21.11.2001, 17:44
2 K_L
А смысл :) С ним и так все понятно То, что "спереди"- от 180 до 360, что "сзади" 0 до -180

K_L
23.11.2001, 14:14
Smysl - krasota neopisuemaja, kakoj cheloveku eshtshe smysl nuzhen? :)

Ostal'nye koefficienty - ot baldy, po-moemu, vzjaty.