. .. : Swf.hu 1.0 archívum : Swf.hu főoldal >>> : .. .


 
 
SEGÉDLETEK Navigáció, Scroll

Dinamikus, egy szintű, fa-szerkezetes menü készítése
  feltöltve: 2004.10.04 | szerző: Ducky | olvasva: 16971 alkalommal

     
 
Ebben a kódrészben kezdődik el az a for ciklus ami a főmenü elemeket hozza létre. A fogombDp fogja megadni a főmenü gombok mélységét (depth). A 'var fdp'-ben hozzuk létre a főmenü gombot, ellátva az instance és depth tulajdonságokkal. A prevmc változó az előző menüpont számát adja vissza, az egymás alá helyezésnél ugyanis minden menüpont ez előtte lévőhöz fog igazodni. Az 'fdp.index'-ben adjuk át a menügomb saját tömbindexét a későbbi hivatkozásokhoz.

/* főmenü létrehozása */
fogombDp = 1;
for (var a = 0; menuTar[a] != undefined; a++) {
// főmenü gomb létrehozása
var fdp = menu_mc.fmenu_mc.attachMovie("fogomb", "fogomb"+fogombDp, fogombDp);
// előző mc indexe
prevmc = fogombDp-1;
// index átadása
fdp.index = a;

Itt a feltételben vizsgáljuk, hogy melyik gombról van szó. Ha az első gomb, akkor az y értéke nulla, ha az első utáni gombok valamelyike, akkor az y helyzet az előző gomb y pozíciójának és magasságának összege lesz. Az x pozíció a főmenü esetében mindig nulla. Ezt követően átadjuk a főmenü címét, amit megjelenítünk a textben és a funkcióját, hogy van-e almenüje vagy nincs.

// x-y értékek
if (fogombDp == 1) {
fdp._y = 0;
} else {
aly = menu_mc.fmenu_mc["fogomb"+prevmc]._y;
alwd = menu_mc.fmenu_mc["fogomb"+prevmc]._height+1;
fdp._y = aly+alwd;
}
// end if
fdp._x = 0;
// főmenü szövege és funkciója
fdp.fmenu.text = menuTar[a][0][0];
fdp.funct = menuTar[a][0][1];

Itt a feltételben vizsgáljuk, hogy van-e almenü a főmenühöz, ha nincs, azaz az érték nem nulla, akkor léptetjük a főmenü mc-t a harmadik frame-re, ahol a nyíl jelzi, hogy nincs almenü. A fogombDp értékét növeljük eggyel.

// almenü hiányának jelölése
if (menuTar[a][0][1] != "0") {
fdp.gotoAndStop(3);
}
// end if
// mélység növelése
fogombDp++;

Ebben a részben kezdődik a főmenü gombjának eseménye. A feltételben ellenőrizzük, hogy van-e almenü, amit a gombnyomásra meg kell jeleníteni. Ha nincs, akkor a főmenü nevét és a hozzá tartozó swf nevét adjuk át a root-on lévő megjelenítő mezőknek.

// gomb lenyomása
fdp.fog_btn.onRelease = function() {
if (this._parent.funct != "0") {
_root.cimke.text = this._parent.fmenu.text;
_root.swfname.text = this._parent.funct;
}

Ha van almenü, akkor a kattintásra a főmenü gomb mozija átlép a második frame-re, ahol a mínusz jel van, ez jelzi, hogy nyitva van a főmenü és megjelentek az almenük. A kezdy változóban adjuk meg az almenü gombok kezdő y értékét. A for ciklussal hozzuk létre az almenü gombokat - ez kezdődik ebben a részben - és a 'var alg'-ban létrehozzuk az almenü gombot.

// end if
if (this._parent._currentframe == 1) {
this._parent.gotoAndStop(2);
kezdy = 19;
// almenü gombok létrehozása
for (var b = 1; menuTar[this._parent.index][b] != undefined; b++) {
var alg = this._parent.attachMovie("almenu", "almenu"+b, b);

Ebben a részben az adatok átadásával kezdjük. Az almenünek megadjuk a kiírandó címet, majd az swf nevét adjuk meg, majd végül a címke változóban azt adjuk meg, hogy mit írjon ki az almenu a root-on, ha megnyomják. Ezt követi az almenü onRelease eseménye. Ha lenyomják az almenü gombot, akkor a root-on kiíratjuk a textekbe a címke tartalmát és az swf nevét, ami az almenühöz tartozik. Ezután megadjuk az almenü mozi x és y értékét, majd az y érték változóját növeljük a következő gomb részére. Utolsóként a scroll-t léptetjük az első frame-re, hogy felvegye az új értékeket.

alg.almenu.text = menuTar[this._parent.index][b][0];
alg.swfload = menuTar[this._parent.index][b][1];
alg.cimke = menuTar[this._parent.index][0][0]+" -> "+menuTar[this._parent.index][b][0];
// almenü gombok eseménye
alg.alg_btn.onRelease = function() {
_root.swfname.text = this._parent.swfload;
_root.cimke.text = this._parent.cimke;
};
alg._x = 10;
alg._y = kezdy;
kezdy += 17;
}
// end for
//menü scroll vezérlése
menu_mc.yscroll_mc.gotoAndPlay(1);

Ha a főmenü mc a második frame-en van, azaz az almenük nyitva vannak, akkor fut le ez a rész. Visszaléptetjük a főmenü mc-t az első frame-re. A for ciklus segítségével töröljük a főmenü ponthoz tartozó almenüket. A scroll-t itt is az első frame-re léptetjük, hogy felvehesse az új értékeket.

} else if (this._parent._currentframe == 2) {
this._parent.gotoAndStop(1);
// almenü gombok törlése
for (var b = 1; menuTar[this._parent.index][b] != undefined; b++) {
this._parent["almenu"+b].removeMovieClip();
}
//menü scroll vezérlése
menu_mc.yscroll_mc.gotoAndPlay(1);
}
// end if

Ebben a részben van a főmenü gombok pozicionálása. Erre azért van szükség, mert ha megjelennek az almenük, akkor az alattuk lévő főmenüknek lejjebb kell kerülnie, ha eltűnnek az almenük akkor meg feljebb. A while cikluson belül annyit teszünk, hogy sorba rendezzük a főmenü gombokat annak megfelelően, hogy az előzőnek mekkora a magassága. Azért tehetjük ezt meg, mert az almenük a főmenü gombokon belül jönnek létre és ezzel együtt a főmenü gomb mc-je is növekszik: változik a magassága.

// főmenü gombok pozicionálása
c = 2;
while (this._parent._parent["fogomb"+c]) {
prevmc = c-1;
aly = menu_mc.fmenu_mc["fogomb"+prevmc]._y;
alwd = menu_mc.fmenu_mc["fogomb"+prevmc]._height+1;
this._parent._parent["fogomb"+c]._y = aly+alwd;
c++;
}
};
}
// end for

Végezetül töröljük az onData eseményt és meghívjuk a függvényt, amiben létrehoztuk az egész műveletet. Azért tettük függvénybe, hogy a későbbiekben lehessen futtatni egyszerűen. Mindent összegezve a menü vagy almenü gombok lenyomásakor visszakapjuk a kiválasztott menüponthoz tartozó swf nevét, amit aztán be lehet tölteni kis kiegészítéssel. Ugyanezzel a módszerrel természetesen nem csak swf neveket adhatunk át, hanem változó értékeket is, pl.: számokat, amivel egy másik mozit vezérelhetünk, de ezt már mindenkinek a saját kreatív elképzelésére bízom.

delete this.onData;
}
//end if
};
//end onData
}
menuLoad();

Ezzel az ActionScript el is készült. A menü szerkezetünk a txt fájl adatainak alapján létrejön, megjelennek a menü gombok és visszakapjuk az átadott adatokat.

Végezetül

Lehet, hogy sokan, főként a kezdőbbek köréből nem ismerik fel a módszerben rejlő lehetőségeket. Természetes, hogy egy layerre dobált statikus menüt sokkal könnyebb összerakni, de munka közben gondolnunk kell az esetleges fejlesztésekre is. Ennél az eljárásnál egy vagy több új fő vagy almenü létrehozásához és kezeléséhez csak a txt fájlt kell szerkeszteni, ami pár perc alatt megvan. Nem kell megnyitni a fla-t és átírni az egész menüszerkezetet az újítások miatt. Remélhetőleg idővel többen is megkedvelik a hasonló txt, xml, php dinamikus megoldásokat is.
 
     
 
 

© Devnet.hu. A segédletek semmilyen formában nem másolhatók, publikálhatók a Devnet.hu és a szerzők közös írásos engedélye nélkül.
 
. .. : Swf.hu 1.0 archívum : Swf.hu főoldal >>> : .. .