Avatar billede johnny_michaelsen Nybegynder
10. november 2005 - 21:39 Der er 6 kommentarer og
1 løsning

hente billeder fra XML til movieClips

Mjello Eksperter...

Jeg er ved at bygge en lille flashting, hvor jeg gerne vil hente nogle billeder gennem standarden XML ind i hver deres movieClip.

De enkelte movieClips skal herefter placeres på min scene i hver deres frame.

Er der mon nogen som har nogle trix i ærmet til denne lille udfordring, eller evt. nogle gode links til, hvordan man kan bygge dette.

venlig hilsen

JBOY
Avatar billede kalleballe Nybegynder
11. november 2005 - 15:52 #1
Hej, - du starter med at lave din xml fil hvor du skriver navnene på dine billeder.

<images>
<picture name="test0.jpg"></picture>
<picture name="test1.jpg"></picture>
<picture name="test2.jpg"></picture>
</images>

ok, - det saver du så som xml og utf-8

Så skal du have data ind i flash, -
her kan du f.eks. bruge:

counter = 0;
//
// creating new xml object called myDoc
var myDoc = new XML();
// path to xml file we are going to load
var myDocName = "data.xml";
// parser
XMLNode.prototype.sendNodes = function(searchName, callback)
{
    /**
    parse XML file.
    looping though xml file to get all relevant data
    **/
    for (var i = 0; i < this.childNodes.length; i++)
    {
        var currentNode = this.childNodes[i];
        if (currentNode.nodeName == searchName)
        {
            callback(currentNode);
        }
        if (currentNode.childNodes.length > 0)
        {
            currentNode.sendNodes(searchName, callback);
        }
    }
};
// after loading xml we parse the data
function checkStatus(success)
{
    /**
    calling handlers, making data arrays
    **/
    if (success)
    {
        /**
        get standard text from xml
        **/
        myDoc.sendNodes("picture", handlePicture);
    }
    else
    {
        // error loading xml.
        errorText.text = "we are sorry but the xml failed to load... please try again later";
    }
}
//
// load XML file
myDoc.ignoreWhite = true;
myDoc.onLoad = checkStatus;
myDoc.load(myDocName);
/////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////  end of all xml handeling  ////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////
function handlePicture(node:Object)
{
    // first we check if we should make a whole menu or just the
    // top header. To do this we see if headerlink has a link value
    pictureData = node.attributes.name;
    /**
    make movieclips
    **/
    tempHolder = _root.createEmptyMovieClip("pictureHolder" + counter, 1000 + counter);
    counter++;
    if (counter > 1)
    {
        tempHolder._x = (counter - 1) * 200;
    }
    tempWidth = tempHolder._width;
    tempHolder.loadMovie(pictureData);
    //
}


Du skal så lige være opmærksom på at

tempHolder._width først eksistere når billedet er 100 procent loadet og dette kræver jo naturligvis en preloader, - det er ikke med her da det jo ikke rigtig er det opgaven går ud på at lave.

Du kan evt sende billed width med i xml filen hvis du er ligeglad med preload a la:

<picture name="test2.jpg" imgWidth = "120"></picture>

og så i flashen:

pictureWidth = node.attributes.imgWidth;

Så kan du skrive

tempHolder._x = ((counter - 1) * Number(pictureWidth)+20);

hvor 20 så er afstanden mellem dine billeder placeret på x aksen.

vh

KalleBalle
Avatar billede kalleballe Nybegynder
11. november 2005 - 15:55 #2
ups bare drop +20, - du kan bare give imgWidth en værdi er er større end den faktiske billede width :)
Avatar billede kalleballe Nybegynder
11. november 2005 - 16:13 #3
så lige at du vil placere billederne i hvert deres frame..... det kan jeg ikke lige se nogen grund til... men hvis det er det du vil så skal du lave et tomt mc i hvert frame og så attache de billeder som du har loadet med ovenstående kode.

altså i frame 1

counter = 0;
rememberPicNames = new Array();
//
// creating new xml object called myDoc
var myDoc = new XML();
// path to xml file we are going to load
var myDocName = "data.xml";
// parser
XMLNode.prototype.sendNodes = function(searchName, callback)
{
    /**
    parse XML file.
    looping though xml file to get all relevant data
    **/
    for (var i = 0; i < this.childNodes.length; i++)
    {
        var currentNode = this.childNodes[i];
        if (currentNode.nodeName == searchName)
        {
            callback(currentNode);
        }
        if (currentNode.childNodes.length > 0)
        {
            currentNode.sendNodes(searchName, callback);
        }
    }
};
// after loading xml we parse the data
function checkStatus(success)
{
    /**
    calling handlers, making data arrays
    **/
    if (success)
    {
        /**
        get standard text from xml
        **/
        myDoc.sendNodes("picture", handlePicture);
        gotoAndPlay(2);
    }
    else
    {
        // error loading xml.
        errorText.text = "we are sorry but the xml failed to load... please try again later";
    }
}
//
// load XML file
myDoc.ignoreWhite = true;
myDoc.onLoad = checkStatus;
myDoc.load(myDocName);
/////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////  end of all xml handeling  ////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////
function handlePicture(node:Object)
{
    // first we check if we should make a whole menu or just the
    // top header. To do this we see if headerlink has a link value
    pictureData = node.attributes.name;
    /**
    make movieclips
    **/
    rememberPicNames.push(pictureData);
    //
}
stop();


i frame 2;

_root.createEmptyMovieClip("imageHolderFrame2", 2000);

_root.imageHolderFrame2.loadMovie(rememberPicNames[0])

i frame 3 etc.:

_root.createEmptyMovieClip("imageHolderFrame3", 2001);

_root.imageHolderFrame3.loadMovie(rememberPicNames[1])

_root.imageHolderFrame3._x = 300

stop();
Avatar billede kalleballe Nybegynder
11. november 2005 - 16:14 #4
P.S. det frame hvor du har dit sidste billede skal have stop(); IKKE de andre frames.
Avatar billede kalleballe Nybegynder
11. november 2005 - 16:27 #5
smid en mail så sender jeg det til dig :)

vh
KalleBalle
Avatar billede johnny_michaelsen Nybegynder
21. november 2005 - 19:10 #6
Tak for dit svar...

Har dog selv fundet frem til noget lignende, men du får dine point for din indsats.

Tak

/Johnnyboy
Avatar billede kalleballe Nybegynder
22. november 2005 - 09:05 #7
jammen så mange tak da, - godt du fandt en løsning.

vh
KalleBalle
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester