April 2008
M T W T F S S
« Mar   May »
 123456
78910111213
14151617181920
21222324252627
282930  




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:

Dinamikus Flash XML alapján

6 April 2008 | Uncategorized | Comments

Comments:

You must be logged in to post a comment.