Jeg går ud fra du bare skal ha værdierne ind i arrayet values for at få det hele til at virke, så er det ret simpelt, lad os sige du har følgende xml fil
Så kan vi fra flash gøre som følger: var xmlData:XML=new XML(); //opret instans af xml klassen xmlData.ignoreWhite=true; //fortolk ikke mellemrum i xml xmlData.onLoad=function(success) { //når xmlData objektet modtager data if (success) { //hvis den kunne loade var xmlNodes:String=this.firstChild.childNodes; //vi gemmer lige alt data for nemhedens skyld for (var i=0;i<xmlNodes.length;i++) { //løb gennem den data values.push(xmlNodes[i].firstChild); //læg værdien ind i values arrayet med push metoden } trace(values); //bare lige for at tjekke at den gemte alle værdierne i arrayet } else { trace('virker ikke'); } } xmlData.load("var.xml"); //her loader vi så filen
Tak for dit hurtige svar... håber du kan hjælpe mig lidt mere...
Det er som om den ikke skubber de values der er sat ned i min value array...
jeg har vedhæftet noget af koden så du kan se...
var xmlData:XML=new XML(); xmlData.ignoreWhite=true; xmlData.load("header.xml"); xmlData.onLoad=function(success) { if (success) { var xmlNodes:String=this.firstChild.childNodes; for (var i=0;i<xmlNodes.length;i++) { values.push(xmlNodes[i].firstChild); } trace(values);// virker fin hvis jeg tracer den her... } else { trace('virker ikke'); } }
lavny();
values = new Array(); // men det er som om der ikke kommer noget ned i denne her... color = [0x0000cc, 0x669999, 0xcc66cc, 0x00cccc, 0x9933cc, 0x990000]; oste = values.length; var procent = oste; var depth = 1; var nTotal=0; var loebendeoste=0; var osteniv1=0; var osteniv2=0;
smid din array defination op øverst sammen med xmlData, og så der hvor du tracer value smider du lavny() ind således at den ikke kalder den før den har loadet værdierne, lige nu bliver de gemt, og så bliver de overskrevet når du efter kalder values=new Array();
var xmlData:XML=new XML(); values = new Array(); xmlData.ignoreWhite=true; xmlData.load("header.xml"); xmlData.onLoad=function(success) { if (success) { var xmlNodes:String=this.firstChild.childNodes; for (var i=0;i<xmlNodes.length;i++) { values.push(xmlNodes[i].firstChild); } trace(values);// virker fin hvis jeg tracer den her... } else { trace('virker ikke'); } }
lavny(); trace(values); // men det er som om der ikke kommer noget ned i denne her... color = [0x0000cc, 0x669999, 0xcc66cc, 0x00cccc, 0x9933cc, 0x990000]; oste = values.length; var procent = oste; var depth = 1; var nTotal=0; var loebendeoste=0; var osteniv1=0; var osteniv2=0;
var xmlData:XML=new XML(); values = new Array(); xmlData.ignoreWhite=true; xmlData.load("header.xml"); xmlData.onLoad=function(success) { if (success) { var xmlNodes:String=this.firstChild.childNodes; for (var i=0;i<xmlNodes.length;i++) { values.push(xmlNodes[i].firstChild); } trace(values);// virker fin hvis jeg tracer den her... lavny(); } else { trace('virker ikke'); } } // men det er som om der ikke kommer noget ned i denne her... color = [0x0000cc, 0x669999, 0xcc66cc, 0x00cccc, 0x9933cc, 0x990000]; oste = values.length; var procent = oste; var depth = 1; var nTotal=0; var loebendeoste=0; var osteniv1=0; var osteniv2=0;
Nu er det ikke fordi jeg vil være vanskelig... men :-)
Burde det så ikke virke hvis jeg tracer values uden for if sætningen?? Det virker nemlig ikke, det virker kun hvis jeg tracer values inden for if sætningen..
sådan her
var xmlData:XML=new XML(); values = new Array(); xmlData.ignoreWhite=true; xmlData.load("header.xml"); xmlData.onLoad=function(success) { if (success) { var xmlNodes:String=this.firstChild.childNodes; for (i=0;i<xmlNodes.length;i++) { values.push(xmlNodes[i].firstChild); } trace(values);// Virker her lavny(); } else { trace('virker ikke'); } } trace(values);// Virker ikke her... color = [0x0000cc, 0x669999, 0xcc66cc, 0x00cccc, 0x9933cc, 0x990000]; oste = values.length; var procent = oste; var depth = 1; var nTotal=0; var loebendeoste=0; var osteniv1=0; var osteniv2=0;
Stadig noget at gøre med hvornår de forskellige ting er defineret, hvis vi lige rtkker rundt på det var xmlData:XML = new XML(); values = new Array(); xmlData.ignoreWhite = true; xmlData.load("var.xml"); color = [0x0000cc, 0x669999, 0xcc66cc, 0x00cccc, 0x9933cc, 0x990000]; var depth = 1; var nTotal = 0; var loebendeoste = 0; var osteniv1 = 0; var osteniv2 = 0; xmlData.onLoad = function(success) { if (success) { var xmlNodes:String = this.firstChild.childNodes; for (i=0; i<xmlNodes.length; i++) { values.push(xmlNodes[i].firstChild); } trace(values); // Virker her oste = values.length; var procent = oste; lavny(); } else { trace('virker ikke'); } }; function lavny() { trace(values); _root.container.duplicateMovieClip("holder", 0); _root.holder._x = 150; _root.holder._y = 150; } Så kan vi se at values er sat, dvs alt kode skal kaldes efter values er blevet sat inde i onload functionen ellers vil den ikke
jepper, grunden til jeg skrev den som ovenstående var sådan set for at undgå den skulle blive indsamlet til spam af de flinke "robotter" som render rundt og laver sådan noget på nettet
Problemet var at den går videre til frame 2 før den er klar, så derfor: var xmlData:XML = new XML(); values = new Array(); xmlData.ignoreWhite = true; xmlData.load("header.xml"); color = [0x0000cc, 0x669999, 0xcc66cc, 0x00cccc, 0x9933cc, 0x990000]; var depth = 1; var nTotal = 0; var loebendeoste = 0; var osteniv1 = 0; var osteniv2 = 0;
xmlData.onLoad = function(success) { if (success) { var xmlNodes = this.firstChild.childNodes; for (i=0; i<xmlNodes.length; i++) { values.push(xmlNodes[i].firstChild); } oste = values.length; var procent = oste; lavny(); } else { trace('virker ikke'); } }; function lavny() { play(); trace(values); _root.container.duplicateMovieClip("holder", 0); _root.holder._x = 150; _root.holder._y = 150; } stop();
Vi ber den om at stoppe i frame 1, og når vi så kalder lavny() funktionen player vi, så kommer den ikke til frame 2 før variablen er sat og så skulle det virke
Ah fordi din xml struktur er en tand dybere og glemte lige xml altid læser som string selvom det er tal så den skal lige konverteres med parseFloat hvis du vil ha decimaler eller parseInt hvis du bare skal bruge helt tal så en gang til: var xmlData:XML = new XML(); values = new Array(); xmlData.ignoreWhite = true; xmlData.load("header.xml"); color = [0x0000cc, 0x669999, 0xcc66cc, 0x00cccc, 0x9933cc, 0x990000]; var depth = 1; var nTotal = 0; var loebendeoste = 0; var osteniv1 = 0; var osteniv2 = 0;
xmlData.onLoad = function(success) { if (success) { var xmlNodes = this.firstChild.childNodes; for (i=0; i<xmlNodes.length; i++) { values.push(parseFloat(xmlNodes[i].firstChild.firstChild)); //her har vi ændret så den gå en tand dybere plus den ændre til tal } oste = values.length; var procent = oste; lavny(); } else { trace('virker ikke'); } }; function lavny() { play(); trace(values); _root.container.duplicateMovieClip("holder", 0); _root.holder._x = 150; _root.holder._y = 150;
var xmlData:XML = new XML(); values = new Array(); xmlData.ignoreWhite = true; xmlData.load("header.xml"); color = [0x0000cc, 0x669999, 0xcc66cc, 0x00cccc, 0x9933cc, 0x990000]; var depth = 1; var nTotal = 0; var loebendeoste = 0; var osteniv1 = 0; var osteniv2 = 0;
xmlData.onLoad = function(success) { if (success) { var xmlNodes = this.firstChild.childNodes; for (i=0; i<xmlNodes.length; i++) { values.push(parseFloat(xmlNodes[i].firstChild.firstChild)); //her har vi ændret så den gå en tand dybere plus den ændre til tal } oste = values.length; var procent = oste; lavny(); } else { trace('virker ikke'); } }; function lavny() { play(); _root.container.duplicateMovieClip("holder", 0); _root.holder._x = 150; _root.holder._y = 150;
Ja men det skulle da ikke være noget problem, din xml smider du bare en ekstra node ind under hver <note> dvs <note> <caption>76</caption> <text>Noget tekst</text> </note>
Og så i flash laver du bare en ekstra array til dine text værdier dvs values = new Array(); texts = new Array();
og så i løkken tilføjer du bare: texts.push(xmlNodes[i].firstChild.childNodes[1]);
og hvis du har flere ting der skal ind i xml'en så får du fat på dem på samme måde altså childNodes[2] childNodes[3] osv så vil den ligge værdierne ind i texts arrayet og så kan du jo bruge dem lige som values :)
Som du hjalp mig med sidste gang, kan jeg nu trække de text variabler jeg har defineret i mit xml dokument ud. Jeg har nu ved at se om jeg kan putte teksten + den farve der hører til, over i en tekstboks som bliver duplikeret ud ved siden af min graf.
Vil du kigge på min kode og se om det er rigtigt det jeg har lavet...
Jeg sender det til dig i en mail hvis det er ok...
i mit movieclip (legenda)hvor jeg har mit dynamiske textfelt har jeg lavet en lille farvet movieclip (farvesq) som jo så bliver duplikert sammen med textfeltet... Men den gider sku ikke skifte farven.
er du noget du kan regne ud hvorfor?
Her er min kode:
frame 1: var xmlData:XML = new XML(); values = new Array(); texts = new Array(); xmlData.ignoreWhite = true; xmlData.load("nyheader.xml"); color = [0x00484a, 0x00707e, 0x4da6ae, 0xd8ede6, 0xad2f9b, 0xc37ab2]; // det er de farver jeg prøver at hente...
var depth = 1; var nTotal = 0; var loebendeoste = 0; var osteniv1 = 0; var osteniv2 = 0;
frame 2:
duplicateMovieClip("legenda","legenda"+t,500+t) setProperty("legenda"+t,_x,400) setProperty("legenda"+t,_y,10 + t*30) set ("legenda"+t +".name",texts[t]) tempColor = new Color(_root.legenda+"farvesq" + t); // det har jeg henter farven... tempColor.setRGB(color[t]);
prøv at ændre tempColor = new Color(_root.legenda+"farvesq" + t); // det har jeg henter farven... tempColor.setRGB(color[t]); Til tempColor = new Color(_root["legenda"+t].farvesq); // det har jeg henter farven... tempColor.setRGB(color[t]); Hvis farvesq er det mc der skal skiftes farve på inden i legenda1 legenda2 osv
Når nu min graf er bleven lavet af alle mine små oste, vil jeg gerne lave en lille rollOver med musen der viser hvor mange procent der er i den... er det muligt???
Jo men det kan du godt, det kræver bare du har referencen til det MC osten er og så kan du lave en: navnSamtStiTilOst.onRollOver=function() { gør noget her } Jeg kan ikke lige gennemskue hvad de forskellige oste bliver gemt som men har du styr på det så skulle ovenstående virke
Nu ved jeg ikke om du har det gamle jeg har sendt til dig, men jeg har fundet ud af at hvis jeg tracer osteniv1 (som fortæller hvilken ost man er i) siger den ost1 ost 2 osv... du kan lig prøve det, Det jeg så ikke kan finde ud af er hvordan jeg får skrevet den sti ned til min rollover... i min function skal jeg vil egentlig bare hente de variabler i mit xml dukument og så finde uf af at få sat et % tegn bagefter....
Jo havde gemt den, ja men du kan få fat på dine oste vha:
_root.holder["ost"+osteniv2+"farve"+osteniv1].onRelease=function() { trace("Der blev klikket på"+this._name); }
Men det giver jo nogle problemer da der er mange mc'er til hver ost,, derfor skal der lige fingles lidt med det før man kan få noget ud af den derfor: lala=this._name; lala=lala.split("farve"); trace(osteprocent[lala[1]]);
Som action vil hente procent for den givne ost, det vi gør er vi splitter navnet fordi den hedder ost1farve0 ost2farve0 osv derved får vi 0 ud og kan derved hente osteprocenten fra arrayet osteprocent
var xmlData:XML = new XML(); values = new Array(); texts = new Array(); header = new Array(); xmlData.ignoreWhite = true; xmlData.load("nyheader.xml"); color = [0x00484a, 0x00707e, 0x4da6ae, 0xd8ede6, 0xad2f9b, 0xc37ab2]; var depth = 1; var nTotal = 0; var loebendeoste = 0; var osteniv1 = 0; var osteniv2 = 0;
xmlData.onLoad = function(success) { if (success) { var xmlNodes = this.firstChild.childNodes; for (i=0; i<xmlNodes.length; i++) { values.push(parseFloat(xmlNodes[i].firstChild.firstChild)); texts.push(xmlNodes[i].firstChild.nextSibling.firstChild); } oste = values.length; var procent = oste; lavny();
} else { trace('virker ikke'); } };
Jeg håber du kan hjælpe mig med sådan en lille en!
Mvh anders
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.