roadyMedlem sedan jan. 2002473 inlägg Jag söker, letar och bläddrar men hittar inga bra svar :(
Jag vill att man skall klicka på en knapp i flash och då läsa in just den informationen från en xml fil.
XML-filen: Information.xml
<?xml version="1.0" encoding="iso-8859-1"?>
<info>
<photo>
<london name="London.jpeg" size="103kb" load="case/photo_london.swf">Bilderna är blandade från när jag var i london över nyår 2000 och när jag hälsade på en vän våren 2001.</london>
<modell name="Modell.jpeg" size="151kb" load="case/photo_modell.swf">De första sju bilderna har jag tagit på fritid och lite till bilduppgifter när jag läste fotografi. De sista tog jag till Falkenbergs kommun i två olika arbeten.</modell>
</photo>
<knowledge>
<grafit name="Grafit.info" size="103kb" load="case/knowledge_grafit.swf"></grafit>
</knowledge>
</info>
jag har delat upp så jag har 2 st swf filer, en som är för att ladda in photo och en för att ladda in knowledge. Ifall vi exempelvis är i den för att ladda in foton så kan en knapp se ut såhär:
on (release) {
showCase("london","information.xml");
}
och då ser scripten ut såhär för den swf-filen:
// Funktion för knapparna att få tillgång till XML-filen
function showCase(infoName,fileName) {
var infoName;
var fileName;
myInfo = new XML(); // skapa ett xml-objekt
myInfo.onLoad = newInfo; // kör funktionen efter inladdning
myInfo.ignoreWhite = true; // fixa alla blanksteg
myInfo.load(fileName); // ladda in xmlfilen
// funktion för att komma till root och childnodes
function newInfo() {
// loopar igenom xmlfilen för att se med childNodes.length hur många child nodes där är
for (var count1=0; count1<=models.childNodes.length; count1++) {
// hämta den "grupp" som man vill ha
if (this.childNodes[count1].nodeName.toLowerCase() == "photo") {
// lägg alla childNodes i en variabel
infoDescription = this.childNodes[count1];
}
}
// skicka variablen till nästa funktion för att plocka ur enskild node
getInfo(infoDescription);
}
// hämta ut specifik node och visa infon i flash
function getInfo(myInfo) {
var myInfo;
for (var count2=0; count2<=myInfo.childNodes.length; count2++) {
if (myInfo.childNodes[count2].nodeName.toLowerCase() == infoName) {
infoDescription = myInfo.childNodes[count2].firstChild;
// Nu har vi fått tag på den node som vi vill ha
_root.load_meny.show_text.text = infoDescription; // här hämtar vi infon i noden
_root.load_meny.show_headline.text = myInfo.childNodes[count2].attributes.name; // Här hämtar vi attributet "name"
_root.load_meny.show_size.text = myInfo.childNodes[count2].attributes.size; // Här hämtar vi attributet "size"
pic = myInfo.childNodes[count2].attributes.load; // Här hämtar vi attributet "load"
loadMovie(pic,"_root.load_show");//we load the swf into an empty MC
}
}
}
}
problemet nu är att ingenting händer. får varken någon fel i output fönstret eller att infon visas i mina textfält... :(
Kanske är det nått sånt här du är ute efter...
http://www.lns.nu/wf/roady/roady.html
Filerna ligger där också.
http://www.lns.nu/wf/roady/ :)
roadyMedlem sedan jan. 2002473 inlägg Alltså..... du är ju hur grym som helst, nu blev jag jätteglad... *bamsekramar*
roadyMedlem sedan jan. 2002473 inlägg efter en fin framgång med inläsandet av xml-info till flash så har det självklart dykt upp problem igen.
I detta (bläddra uppåt) inlägget så har jag haft 2 nodes (eller vad det nu heter (photo och knowledge))...
men nu uppstår problem när jag vill ha 5st.
- <flash>
+ <photo>...undernoder...</photo>
+ <knowledge>...undernoder...</knowledge>
+ <case>...undernoder...</case>
+ <music>...undernoder...</music>
+ <contact>...undernoder...</contact>
</flash>
Det är bara de 2 första som fungerar (kan flytta om ordningen så funkar fortfarande bara de 2 översta "noderna")
Den röda raden är där man ändrar för att hämta in den "nodens" info.
Knappen man trycker på för att få fram infon är fortfarande
on (release) {
showCase("undernoden","information.xml");
}
Koden ser ut som såhär:
System.useCodePage = true;
// Funktion för knapparna att få tillgång till XML-filen
function showCase(infoName, fileName) {
var infoName;
var fileName;
myInfo = new XML();// skapa ett xml-objekt
myInfo.onLoad = newInfo;// kör funktionen efter inladdning
myInfo.ignoreWhite = true;// fixa alla blanksteg
myInfo.load(fileName);// ladda in xmlfilen
// funktion för att komma till root och childnodes
function newInfo() {
// loopar igenom xmlfilen för att se med childNodes.length hur många child nodes där är
for (var count1 = 0; count1 <= myInfo.childNodes.length; count1++) {
// hämta den "grupp" som man vill ha
[red]if (myInfo.firstChild.childNodes[count1].nodeName.toLowerCase() == "case")[/red] {
// lägg alla childNodes i en variabel
infoDescription = myInfo.firstChild.childNodes[count1];
}
}
// skicka variablen till nästa funktion för att plocka ur enskild node
getInfo(infoDescription);
}
// hämta ut specifik node och visa infon i flash
function getInfo(myInfo) {
var myInfo
for (var count2 = 0; count2 <= myInfo.childNodes.length; count2++) {
if (myInfo.childNodes[count2].nodeName.toLowerCase() == infoName) {
infoDescription = myInfo.childNodes[count2].firstChild.toString();
// Nu har vi fått tag på den node som vi vill ha
var pos;
while ((pos = infoDescription.indexOf("|")) >= 0) {
infoDescription = infoDescription.substr(0, pos) + "\n" + infoDescription.substr(pos + 1, infoDescription.length);
}
//_root.load_meny.show_text.text = infoDescription;
_root.load_meny.show_text.text = infoDescription;
// här hämtar vi infon i noden
_root.load_meny.show_headline.text = myInfo.childNodes[count2].attributes.name;
// Här hämtar vi attributet "name"
_root.load_meny.show_size.text = myInfo.childNodes[count2].attributes.size;
// Här hämtar vi attributet "size"
pic = myInfo.childNodes[count2].attributes.load;
// Här hämtar vi attributet "load"
loadMovie(pic, _root.load_show);
//we load the swf into an empty MC
}
}
}
}
Tror att det är här som den räknar fel
for (var count1 = 0; count1 <=[b]myInfo.childNodes.length[/b]; count1++) {
// hämta den "grupp" som man vill ha
if (myInfo.firstChild.childNodes[count1].nodeName.toLowerCase() == "case") {
// lägg alla childNodes i en variabel
infoDescription = myInfo.firstChild.childNodes[count1];
}
}
pröva med
for (var count1 = 0; count1 <= myInfo.firstChild.childNodes.length; count1++) {
// hämta den "grupp" som man vill ha
if (myInfo.firstChild.childNodes[count1].nodeName.toLowerCase() == "case") {
// lägg alla childNodes i en variabel
infoDescription = myInfo.firstChild.childNodes[count1];
}
}
roadyMedlem sedan jan. 2002473 inlägg ännu en gång kommer du ridandes som en riddare och räddar mig *stor tack* =)
fumusMedlem sedan apr. 200139 inlägg Flash 6 vs Flash 8
Använder mig av samma funktion som ovan, men får den endast att fungera i Flash 6 men inte i Flash 8.
Någon som kan hjälpa/förklara varför?
Mest troligt beror det på att Flash 8 Actionscript skiljer på små och stora bokstäver medans Flash 6 inte gör det.
/Mirandir
fumusMedlem sedan apr. 200139 inlägg Förstår inte riktigt vad du menar?
När jag försöker att köra det i Flash 8, så får jag upp en ruta som säger att:
"A script is causing Flash Player to run slowly. if itcontinues to run, your computer may become unresponsive. Do you want to abort the script YES NO"
Men när jag kör det som F 6 så fungerar det hur bra som helst...
/Christer
fumusMedlem sedan apr. 200139 inlägg Löste sig, jag som slarvat med vad jag kallat saker och ting...
//Christer