MovieClip dinamikus létrehozása XML file-al
Az el?z? cikkben (MovieClip dinamikus létrehozása, és kezelése) egy fix lépésszámú for ciklussal hoztuk létre az új objetumokat, aminek viszonylag nem sok értelme volt. Ezért most egy sokkal jobban használható verziót mutatok be.
A lényeg, hogy egy XML fileban letároljuk a megjelenítend? movieClip-ek paramétereit, és ez alapján hozzuk létre, és jelenítjük meg ?ket.
A paraméterek a következ?k lesznek:
- X pozíció
- Y pozíció
- szélesség
- magasság
- kitölt? szín
Természetesen ezeket lehet b?víteni, hogy az adott feladathoz illeszkedjen. Pl. ha egy képgalériát készítünk, aminél az XML fileban tároljuk a képek neveit.
Tehát készítsünk egy XML file-t:
<movieclips>
<movieclip xpos="10" ypos="10" width="40"
height="20" color="0x000000"></movieclip>
<movieclip xpos="80" ypos="15" width="26"
height="40" color="0xFF0000"></movieclip>
<movieclip xpos="170" ypos="10" width="30"
height="10" color="0x00FF00"></movieclip>
<movieclip xpos="70" ypos="150" width="30"
height="20" color="0x0000FF"></movieclip>
<movieclip xpos="80" ypos="170" width="50"
height="40" color="0x777777"></movieclip>
<movieclip xpos="130" ypos="190" width="10"
height="30" color="0xFF4488"></movieclip>
<movieclip xpos="100" ypos="100" width="40"
height="20" color="0xFFFF00"></movieclip>
<movieclip xpos="170" ypos="160" width="70"
height="40" color="0x00FFFF"></movieclip>
<movieclip xpos="180" ypos="110" width="30"
height="60" color="0xFF00FF"></movieclip>
</movieclips>
Ha ezt megtettük, készítsünk egy új flash dokumentumot a flash szerkeszt?vel, és az els? layer els? frame-jébe tegyük be a következ? kódot:
XML_data = new XML();
XML_data.onLoad = onLoadXML;
XML_data.load("movieclip.xml");
function onLoadXML() {
count = this.firstChild.childNodes.length;
for (i=0; i<count; i++) {
mcWidth = int(this.firstChild.childNodes[i].attributes.width);
mcHeight = int(this.firstChild.childNodes[i].attributes.height);
mcColor = int(this.firstChild.childNodes[i].attributes.color);
mc = createEmptyMovieClip("mc_"+i, i);
mc.lineStyle(2, 0x555555, 100);
mc._alpha = 100;
colors = [0xFFFFFF, mcColor];
alphas = [100, 100];
ratios = [0, 255];
matrix = {
matrixType:"box", x:0, y:0,
w:mcWidth, h:mcHeight, r:0
};
mc.beginGradientFill("linear",
colors, alphas,ratios, matrix);
mc.moveTo(0, 0);
mc.lineTo(mcWidth,0);
mc.lineTo(mcWidth,mcHeight);
mc.lineTo(0, mcHeight);
mc.lineTo(0, 0);
mc._x = int(
this.firstChild.childNodes[i].attributes.xpos);
mc._y = int(this.firstChild.childNodes[i].attributes.ypos);
}
}
Nézzük az XML file beolvasását.
Az els? sor létrehoz egy új XML objektumot, amibe kés?bb (3 sor) a load metódusát használva be is olvassuk a file-t. El?tte az onLoad-ra ráállítjuk a saját függvényünket, hogy mikor elvégzi a betöltést, tudjunk cselekedni.
Indításkor betölt?dik az XML file, és lefut a már említett onLoad esemény. Egy count nev? változóba beletesszük a firstChild, vagyis a <movieclips> gyerekeinek a számát. Ez lesz a jelenlegi fix lépésszámú ciklusunk lépésszáma.
Kiolvassuk a paramétereket, amelyeket a
this.firstChild.childNodes[<index>].attributes.<paraméter>
metódussal tudunk kezelni. A “this” azért jó, mert az XML objektum eseményében vagyunk, ezért a “this” rá vonatkozik. Az int() typecast pedig azért kell, hogy biztosan számként jelenjenek meg a paraméterek.
A ciklus belsejében a már megismert movieClip létrehozó kódunk található. Az egyetlen módosítás, hogy most a pozicionálás és a méretek beállítása a kiolvasott paraméterek alapján történik.
Ha minden ok, akkor így fog kinézni az én XML file-om alapján:

Comments:
You must be logged in to post a comment.