Toon posts:

[AS] Url uit XML halen en vervolgens in Flash laden

Pagina: 1
Acties:

Verwijderd

Topicstarter
Probleem...
Ik heb een XML file met daarin de URL van een plaatje.
De bedoeling is dat de Flashfile de locatie van het plaatje uit de XML file haalt en vervolgens met die gegevens het plaatje in de flashfile laadt.
Nu heb ik hetvolgende gebouwd:
2 Layers met in dezelfde frame actionscript.

In de XMLLoader:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
picXML = new XML();
picXML.ignoreWhite = true;
picXML.load('pic_locator.xml');
picXML.onLoad = getData;

function getData(success)
{
    if(success)
    {
        for(i=0; i < picXML.firstChild.childNodes.length; i++)
        {   
            varNum = picXML.firstChild.childNodes[i].attributes.fromto;
            if (varNum == 2){
                varPictureUrl2 = picXML.firstChild.childNodes[i].attributes.picture_url;            
                break;
            }
        }
    }
    else
    {
        trace("Er is iets misgegaan");
    }
}


In de jpg loader:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
MovieClip.prototype.loadjpg = function(picNaam, holderNaam) {
    var h = holderNaam==undefined ? "holder" : holderNaam;
    this.createEmptyMovieClip(h, 1);
    this._visible = false;
    this[h].loadMovie(picNaam);
    var id = setInterval(function (mc) {
        if (mc[h]._width > 0) {
            mc._alpha = 99;
            clearInterval(id);
            mc._visible = true;
            mc.onComplete();
        } else {
            mc.onLoading();
        }
    }, 80, this);  
};

_global.picLoaded = false;
function positionIt() {
    this._x = 0.0;
    this._y = 0.0; 
}


this.createEmptyMovieClip("startJpg", 1);
startJpg.onComplete = positionIt;
startJpg.loadjpg(varPictureUrl2);


En de XML file:
code:
1
2
3
4
5
<?xml version="1.0"?>
<pic_locator>
      <background fromto="1" picture_url="banner.jpg" />
      <background fromto="2" picture_url="banner2.jpg" />
</pic_locator>


Momenteel werkt het niet helemaal, het probleem is dat ie eerst het plaatje op wil halen om er dan pas achter te komen welk plaatje het ding moet hebben. Met als resultaat de volgende foutmelding:
Error opening URL "file:///C/..... /Flash/undefined"
Apart van elkaar doen ze het beiden goed.

Als ik een trace zet in de XML Loader onder "break }}", en een trace in de JPG Loader boven "this.createEmptyMovieClip("startJpg", 1);" Krijg ik de volgende foutmelding:
undefined
Error opening URL "file:///C/..... /Flash/undefined"
banner2.jpg
Ik heb gezocht hier op GoT en op Google maar geen werkende oplossing gevonden.

Wat ik geprobeerd heb is om de jpg load code 1 frame verder te zetten wat niet hielp en om een
if(varPictureUrl=!undefined){} rond de jpg loader te zetten.

Iemand enig idee hoe ik dit oplos?
Alvast bedankt!

Verwijderd

Topicstarter
Niemand die een oplossing weet?
Ik heb nog verder aan zitten rommelen met een voorbeeld uit:
http://forum.macosx.nl/viewtopic.php?t=53485

Maar ook dit krijg ik niet werkende.

Verwijderd

Het probleem zit hem in het feit dat de code voor het laden van het plaatje wordt uitgevoerd terwijl de xml file nog niet helemaal geladen is. Probeer het volgende eens, zeker weten dat het werkt:

Maak twee keyframes

In keyframe 1 zet je:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
picXML = new XML();
picXML.ignoreWhite = true;
picXML.onLoad = getData;
picXML.load('pic_locator.xml')

function getData(success)
{
    if(success)
    {
        for(i=0; i < picXML.firstChild.childNodes.length; i++)
        {   
            varNum = picXML.firstChild.childNodes[i].attributes.fromto;
            if (varNum == 2){
                varPictureUrl2 = picXML.firstChild.childNodes[i].attributes.picture_url;                                    
                gotoAndPlay(_currentframe + 1);
                break;
            }
        }
    }
    else
    {
        trace("Er is iets misgegaan");
    }
}
stop();


In de volgende keyframe zet je:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
MovieClip.prototype.loadjpg = function(picNaam, holderNaam) {
    var h = holderNaam==undefined ? "holder" : holderNaam;
    this.createEmptyMovieClip(h, 1);
    this._visible = false;
    this[h].loadMovie(picNaam);
    var id = setInterval(function (mc) {
        if (mc[h]._width > 0) {
            mc._alpha = 99;
            clearInterval(id);
            mc._visible = true;
            mc.onComplete();
        } else {
            mc.onLoading();
        }
    }, 80, this);  
};

_global.picLoaded = false;
function positionIt() {
    this._x = 0.0;
    this._y = 0.0; 
}


this.createEmptyMovieClip("startJpg", 1);
startJpg.onComplete = positionIt;
startJpg.loadjpg(varPictureUrl2);
stop();


Je zorgt er nu voor dat de code in frame 2 pas uitgevoerd wordt nadat je zeker weet dat de code in frame 1 zijn werk goed heeft gedaan. Ik heb slechts een paar regels toegevoegd aan jou code, maar ik kan je wel aanraden om nog eens wat voorbeelden te bekijken want dit is niet echt een ideale manier van as programmeren...

Succes!

Verwijderd

Gelukt inmiddels? Het is aardig als je de oplossing post, zodat mensen hier in de toekomst ook wat aan hebben...

Verwijderd

Topicstarter
Het werkt inderdaad :) Hartstikke bedankt!
Ben nu bij het volgende probleem aangekomen, maar daar rommel ik eerst even mee aan :P .
Ik zal morgen de gebruikte code posten.