Lucrez de 5 ani de zile pe flash – actionscript, timp in care am invatat gramezi de la altii. Mi-a trecut de multe ori prin cap sa „intorc” ceva comunitatii care m-a ajutat sa-mi castig painea, dar din diverse motive de lene si timp n-am facut-o, inca. Unul din cele mai des folosite lucruri in flash (parerea mea), este XML-ul. Mereu trebuie sa incarci cate o configuratie, o setare, un text extern pentru a putea face un site / joc in 2 limbi, samd. Sau pur si simplu pentru a nu recomplica fla-ul atunci cand se schimba un textulet.
So, here goes, un tool pentru a citi si parsa XML-uri.
O sa explic intai cum se foloseste, si dupa o sa dau detalii despre cum e structurata clasa.
Se pleaca de la un XML, cu un singur nivel. Atributele esentiale sunt „id”, si „body”. restul sunt optionale
Codu de parsare este extrem de simplu. se foloseste functia find, cu 2 parametri. primul este id-ul nodului, si al 2-lea atributul care ne trebuie
xmlr = new XMLReader(); // instantiem clasa xmlr.init('blabla.xml'); // ii spunem ce sa incarcefunction function onEnterFrame() { if (xmlr.getStatus() != false) { trace('XMLReader initializat'); trace('--------'); trace('id1 - body (implicit): ' + xmlr.find('id1')); trace('id1 - attr1: ' + xmlr.find('id1', 'attr1')); trace('id1 - attr2 (nu exista): ' + xmlr.find('id2', 'attr2')); trace('id5 - (nu exista): ' + xmlr.find('id5')); delete onEnterFrame; } }
Asta-i tot. In continuare o arhiva cu sursele.
XMLReader.rar
class XMLReader { // declaratiile de variable. private var init_status:Boolean; // init_status spune daca s-a incarcat xml-ul. private var texte:Array = new Array(); // locul in care se tine xml-ul parsat, ca obiecte private var my_xml:XML; // costructor gol function XMLReader () { } public function init(argument:String) { init_status = false; my_xml = new XML(); var rootnode; my_xml.ignoreWhite = true; my_xml.load(argument); var parinte = this; my_xml.onLoad = function(succes) { if (succes) { parinte.init_status = true; rootnode = this.firstChild.childNodes; for (var i=0; i<rootnode.length; i++) { var o = new Object(); o.id = rootnode[i].attributes['id']; for (var j in rootnode[i].attributes) { o[j] = rootnode[i].attributes[j]; } parinte.texte.push(o); } texte.sortOn("id"); return(true); } // end if succes else { return(false); } } } public function getStatus() { return(init_status); } public function find (id:String, attribute:String) { if (arguments.length == 0) { trace('XMLReader error: xml-ul nu a fost initializat'); return(false); } if (arguments.length == 1) { // nu avem atributul, deci implicit va fi "body" attribute = 'body'; } if (init_status != true) { trace('XMLReader error: xml-ul nu a fost initializat'); return(false); } for (var i=0; i<texte.length; i++) { var o = texte[i]; if (o.id == id) { if (o[attribute] == undefined) { trace('XMLReader error: elementul cu id-ul ' + id + ' nu are niciun atribut ' + attribute); return(false); } return o[attribute]; } } trace('XMLReader error: id-ul cautat nu exista'); return(false); } }
Stiu ca utilitatea acestui „programel” este fix zero pentru 99% dintre cititori, insa pentru restul de 1% poate face o diferenta enorma. go flasheri
Salut.
AS 3 ai incercat? Eu acum m-am apucat de AS 3 si e cam aiurea :)).
Ti-am mai citit posturile. GG. Si eu ma plimb recent cu bicicleta si lucrez flash la o firma.
See ya.
Apropo. Poti sa folosesti SharedObject in Flash pentru setari si chestii din astea. Nu ai nevoie de XML. E ca un cookie si poti sa faci chestii simple pe care sa le tina minte: setari de meniu, limba, etc.
SharedObjectul se creaza simplu unde e downloadat flash-ul, in cache-ul tau, si tine minte ce ii stochezi in variabile. E super simplu si util.