pomoc oko menija u flashu

miksin

Zainteresovan član
Poruka
196
ideja za meni je sledeca
stoje reci links, forum, cell, about, downloads
kada stavim kursor na neku rec ta rec treba da ostane ista a sve druge da se provide(_alpha=30)
ovo je kod na jednom movie clipu,
onClipEvent (load) {
brojac = 100;
}
onClipEvent (enterFrame) {
if (linkss == "over") {
if (brojac>30) {
brojac -= 14;
}
setProperty("_root.anim.about",_alpha,brojac);
setProperty("_root.anim.cell",_alpha,brojac);
setProperty("_root.anim.forum",_alpha,brojac);
setProperty("_root.anim.downloads",_alpha,brojac);
}
if (linkss == "out") {
if (brojac<100) {
brojac += 14;
}
setProperty("_root.anim.about",_alpha,brojac);
setProperty("_root.anim.cell",_alpha,brojac);
setProperty("_root.anim.forum",_alpha,brojac);
setProperty("_root.anim.downloads",_alpha,brojac);
}
}

a u tom movie clipu se nalazi dugme koda:
on(rollOver){
linkss="over";
}
on(rollOut){
linkss="out";
}
postoji za svako dugme po jedan ovakav mc (preradjen da se providi sve sem tog)
to sve zasebno lepo radi ali kada sa jednog dugmeta prebacim na neko drugo dugme javljaju se problemi
providno postane samo ono dugme sa kog sam prebacio a ostala nista.
ako vam nije jasno poslacu vam swf na mail samo mi recite.
 
Ako neznas dobro Action script Probaj da svoj meni uradis sa frejmovima i sa slojevima.
Fajl ce ti nesto veci nego kada koristis Action script.
Ni ja nisam nesto jako dobar u Action script-u ali bi to sto si ti zamislio drugacije uradio...
 
Hmmm to je jako naivan pristup celom problemu... Moras da naucis da analiticki razmisljas ako hoces ista da programiras a da to radi... Mozes sa crtanjem algoritama da tako nesto resis, mozes i sa obicnom analizom problema, to je na tebi...

Evo recimo kako ja razmisljam kad naletim na 'problem' koji hoces da resis...

1) Samo jedan (ili ni jedan) klip sa tekstom je aktivan u odredjenom vremenu
2) Aktivnost odredjuje pozicija misa iznad bilo kog klipa
3) Fade in/out treba da bude animiran (to naslucujem iz koda koji si postovao)

Dakle, kako najlakse to odraditi?

Obzirom da svi klipovi zavise jedan od drugih, treba odraditi centralizovan sistem (funkciju) koja ce proveravati stanje svih klipova.

Drugo pitanje je kako odraditi dugmice. Najlakse, u ovom slucaju, bi bilo napraviti dugmice sa tim tekstovima, pa svaki od njih smestiti u zaseban movie clip (moze i samo sa button-om, ali da sad ne objasnjavam prednosti i mane, ovo je bolje za pocetnike)

I onda samo malo prostog kodiranja...

Dakle, napravis na main timeline funkciju koja ce sluziti za kontrolu klipova... Sad to mozes odraditi na milion razlicitih nacina, evo jednog od najlaksih za razumevanje:

Kod:
function showClip(name) {
	var speed = 15; // koraci u kojima treba _alpha da raste/opada
	var lowLimit = 30; // alpha 'neaktivnih' klipova
	var highLimit = 100; // alpha 'aktivnih' klipova
	var clipList = ['links_clip', 'forum_clip', 'cell_clip', 'about_clip', 'downloads_clip']; // lista klipova na main timeline-u, objasnicu kasnije
	for(var i in clipList) { // loop svakog od imena klipova
		delete _root[clipList[i]].onEnterFrame; // za svaki slucaj unistiti prethodno deklarisane rutine
		
		/* prenosenje varijabli na klip */
		_root[clipList[i]].speed = speed;
		_root[clipList[i]].lowLimit = lowLimit;
		_root[clipList[i]].highLimit = highLimit;
		
		if(name == clipList[i]) { // provera da li je funkcija pozvana za prikazivanje klipa iz atributa ('name')
			_root[clipList[i]].onEnterFrame = function() {
				if(this._alpha < this.highLimit) { // provera da li je klip stigao do maksimalne _alpha vrednosti
					this._alpha += Math.min(this.speed, this.highLimit-this._alpha); // odredjivanje koliko dodati _alpha vrednosti
				} else {
					delete this.onEnterFrame; // brisanje onEnterFrame funkcije i trigera posto je klip dostigao maksimalnu _alpha vrednost
				}
			}
		} else {
			_root[clipList[i]].onEnterFrame = function() {
				if(this._alpha > this.lowLimit) { // provera da li je klip stigao do minimalne _alpha vrednosti
					this._alpha -= Math.min(this.speed, this._alpha-this.lowLimit); // odredjivanje koliko oduzeti od _alpha vrednosti
				} else {
					delete this.onEnterFrame; // brisanje onEnterFrame funkcije i trigera posto je klip dostigao minimalnu _alpha vrednost
				}
			}
		}
	}
}

Ovakva funkcija ce lako odraditi sav dirty posao. Naravno, ovo moze jako jednostavnije da se odradi (preko prototipa ili pravljenja novih klasa itd.) ali ovo je bazicno i proceduralno pa je lakse za razumevanje.

Sad jedino sto ti preostaje je da setujes da tvoji dugmici unutar klipova pozivaju ovu funkciju sa imenom njihvog parent klipa. Dakle, na dugmice unutar klipova stavi:

Kod:
on (rollOver) {
	_root.showClip(this._name); // kaze funkciji da 'osvetli' klip sa imenom koje drzi button
}
on (rollOut, releaseOutside) {
	_root.showClip(); // kaze funkciji da sve 'zamraci' posto nije ime navedeno
}

I sad jedino sto ti preostaje je da rasporedis te klipove po main timeline-u, i da ih imenujes kao sto si u listi na pocetku funkcije (ono sto sam rekao kasnije cu objasniti)...

I to je to... As simple as that... Ovo moze biti daleko sofisticiranije, ali za tvoje potrebe i ovo je dovoljno. Uostalom, nemam vremena da objasnjavam kompleksnije nacine za resavanje...

Nisam ovo testirao, ali bi trebalo da radi... Ako sam napravio neku sintaksnu gresku, posto sam pisao na brzaka, sam Flash ce ti javiti...
 
probao sam ovo i nije to to
Ja hocu da dugmici imaju property alpha 100 dok stoje.
kada nalslonim misa, da dugme na koje sam naslonio treba takodje da bude alpha=100 a svi ostali 30. a kada ga sklonim da opet svi budu 100.
ovo tvoje se ili baguje ili nisi shvatio ili ja nisam nesto dobro uradio sto ce pre biti.
Imas li neku ideju :?:
 
Ja sam mislio da svi treba da budu fejdovani, a samo onaj koji se 'rollover-uje' da dobije 100 alpha...

Nista zato, samo malo izmenis funkciju:

Kod:
function showClip(name) {
	var speed = 15; // koraci u kojima treba _alpha da raste/opada
	var lowLimit = 30; // alpha 'neaktivnih' klipova
	var highLimit = 100; // alpha 'aktivnih' klipova
	var clipList = ['links_clip', 'forum_clip', 'cell_clip', 'about_clip', 'downloads_clip']; // lista klipova na main timeline-u, objasnicu kasnije

	for(var i in clipList) { // loop svakog od imena klipova
		delete _root[clipList[i]].onEnterFrame; // za svaki slucaj unistiti prethodno deklarisane rutine
		
		/* prenosenje varijabli na klip */
		_root[clipList[i]].speed = speed;
		_root[clipList[i]].lowLimit = lowLimit;
		_root[clipList[i]].highLimit = highLimit;
		
		if(name == clipList[i] || arguments.length < 1) { // provera da li je funkcija pozvana za prikazivanje klipa iz atributa ('name')
			_root[clipList[i]].onEnterFrame = function() {
				if(this._alpha < this.highLimit) { // provera da li je klip stigao do maksimalne _alpha vrednosti
					this._alpha += Math.min(this.speed, this.highLimit-this._alpha); // odredjivanje koliko dodati _alpha vrednosti
				} else {
					delete this.onEnterFrame; // brisanje onEnterFrame funkcije i trigera posto je klip dostigao maksimalnu _alpha vrednost
				}
			}
		} else {
			_root[clipList[i]].onEnterFrame = function() {
				if(this._alpha > this.lowLimit) { // provera da li je klip stigao do minimalne _alpha vrednosti
					this._alpha -= Math.min(this.speed, this._alpha-this.lowLimit); // odredjivanje koliko oduzeti od _alpha vrednosti
				} else {
					delete this.onEnterFrame; // brisanje onEnterFrame funkcije i trigera posto je klip dostigao minimalnu _alpha vrednost
				}
			}
		}
	}
}
 
INCOGNITO CAR SI.
:P :P :P
Ja sam se mucio da otklonim moj bag a trebao sam da problem drugacije gledam.
Sve u svemu puno hvala, a ovaj tvoj primer nije samo resio jedan moj problem vec vise njih. Ja sam do sada funkcije koristio samo za proste radnje i smanjenje kucanja a sad.....
ma da ti nepricam.
 

Back
Top