PDA

Volledige versie bekijken : Problemen met jpg's laden uit XML


Monster
%Europe/Berlin %443 %2005, 11:38
Ik heb een vraag over afbeeldingen laden vanuit een XML.
ik moet een 360graden rotatie maken in flash.
probleem is dat ik de afbeeldingen alleen mag laden vanuit een xml en niet op de stage mag zetten.
Ik kom er alleen niet uit.


dit is me XML bestand

<?xml version="1.0" encoding="iso-8859-1"?>
<auto>
<scene img="img/1.jpg" tekst="test1"/>
<scene img="img/2.jpg" tekst="test2"/>
<scene img="img/3.jpg" tekst="test3"/>
<scene img="img/4.jpg" tekst="test4"/>
</auto>

en dit is een stukje ActionScript

fotoXML = new XML();
fotoXML.ignoreWhite = true;
fotoXML.onLoad = function(){
trace(this.firstChild.childNodes);
};

fotoXML.load("foto.xml");



Weet iemand misschien welke codes ik nodig heb om de afbeeldingen aan te roepen en zodat ik ze te zien krijg?
het is iets met firstChild.childNodes[]
maar verder kom ik niet..
ik krijg wel me hele XML bestand te zien als ik hem trace

Laatste keer dat ik met flash/ActionScript gewerkt heb is 2 jaar geleden..
Het is nu dus een beetje weggezakken en misschien dat er iemand raad hiermee weet.

gbolssens
%Europe/Berlin %460 %2005, 12:02
Aangezien de filename in een van je attributes zit, moet je met de attributes array werken. Flash help vertelt je daar meer over (ben ook geen XML expert).

greetz,
GB

Monster
%Europe/Berlin %529 %2005, 13:42
Het blijft voor mij ook een raadsel.. :S

Monster
%Europe/Berlin %597 %2005, 15:21
Niemand die hier een antwoord op weet?

gbolssens
%Europe/Berlin %604 %2005, 15:30
Al eens in de flash hulp naar de .attributes array van het XML object gekeken? Het is een associatieve Array, dus wel opletten hoe je de zaak opvraagt. Dingen zoals .length en zo werken niet.

Monster
%Europe/Berlin %638 %2005, 16:19
neej dat weet ik dat length niet nodig is..
maar via die flash hulp wordt ik ook niet veel wijzer..
heb er naar gekeken en zou nou nog niet weten wat ik moet doen.
ik weet hoe ik het op moet vragen ongeveer.
met die firstChild.childNodes maar verder kom ik niet.. loop hier al een paar dagen op te puzzelen en nu gooi ik het maar is op flashfocus in de hoop dat iemand er raad mee weet..

mateo)
%Europe/Berlin %649 %2005, 16:34
var fotoXML:XML = new XML();
fotoXML.ignoreWhite = true;
fotoXML.onLoad = function(){
var base:Array = this.firstChild.childNodes;
for(var i:Number = 0; i < base.length; i++){
trace(base[i].attributes.img);
}
}
fotoXML.load("foto.xml");

Flasher
%Europe/Berlin %650 %2005, 16:36
var fotoArray:Array = new Array();
var fotoXML:XML = new XML();
fotoXML.ignoreWhite = true;
fotoXML.onLoad = function(){
var tempArray:Array = this.firstChild.childNodes;
for(i=0;i<tempArr.length;i++) {
fotoArray[i] = new Object();
fotoArray[i].image = tempArray[i].attributes.image;
fotoArray[i].text = tempArray[i].attributes.tekst;
}
};
fotoXML.load("foto.xml");

Je hebt nu een array fotoArray. Op elke plek in de array zit een object met daarin de naam van de afbeelding en de tekst. Je kan die dan oproepen met fotoArray[nr].image en fotoArray[nr].text.

gebruik een [ as ] tag ipv [ CODE ] :)

Monster
%Europe/Berlin %662 %2005, 16:53
Je hebt nu een array fotoArray. Op elke plek in de array zit een object met daarin de naam van de afbeelding en de tekst. Je kan die dan oproepen met fotoArray[nr].image en fotoArray[nr].text.


Woow woow woow..
ik ben een noob op het gebied van AS..
ik wil de foto's via AS laden vanuit een XML document.
en daarna wil ik via een button naar de volgende foto toe.
er komt verder niets bij kijken dan alleen AS en XML
puur alleen de codes..
hoe krijg ik dan de afbeeldingen te zien?

The_One
%Europe/Berlin %794 %2005, 20:04
zoals Flasher al zegt:

Je kan die dan oproepen met fotoArray[nr].image en fotoArray[nr].text.

Het ligt eraan hoe je je pics wilt laten zien. Met loadMovie kan je bijv dit doen:

container_mc.loadMovie(fotoArray[2].image);

Dat moet wel werken denk ik :)!

Monster
%Europe/Berlin %339 %2005, 09:08
Het ligt eraan hoe je je pics wilt laten zien. Met loadMovie kan je bijv dit doen:

container_mc.loadMovie(fotoArray[2].image);


Dat moet wel werken denk ik :)!

ik heb het geprobeerd en het werkt nog steeds niet..
ik heb hem getraced en dan geeft hij aan undefined
Zou daar het probleem in zitten dan?

mateo)
%Europe/Berlin %378 %2005, 10:05
misschien ligt het eraan dat in je xml het attribuut img heet en in het script een attribuut image wordt gezocht. (tenminste in het script van flasher :))

Monster
%Europe/Berlin %379 %2005, 10:06
die fout zag ik al en heb het aangepast in het script.
kan wel kijken hoe hij erop reageert als ik in het xml de img aanpas in image



--------------------------------------------------------------------------------------

ik heb gekeken, maar dat maakt geen verschil..
het stomme is dat ik gewoon te lang niet aan AS heb gezeten en nu ineens weer iets moet maken..
ik word al oud 8~
ik begin te dementeren 8~

mateo)
%Europe/Berlin %386 %2005, 10:16
het zal wel weer aan de paden liggen dan. als je array en je container_mc allebei op de root staan, probeer dan eens:

_root.container_mc.loadMovie(_root.fotoArray[2].image);


edit:
en ik zie nog een slordigheidje in het script. tempArr en tempArray worden door elkaar gehaald, gebruik een van de twee...

Monster
%Europe/Berlin %396 %2005, 10:30
werkt ook al niet :S

stomme vraag misschien, maar wat steld container_mc voor?
moet dat een lege mc wezen?

hij blijft tegen deze code undefined zeggen

_root.container_mc.loadMovie(fotoArray[2].image)

is er niet een script dat een afbeelding uit een xml bestand trekt?
want het probleem voor de tekst is er niet..
dat weet ik wel op te lossen..
het gaat me om de verrekte afbeeldingen..

svenneke
%Europe/Berlin %415 %2005, 10:59
Hi,

ik gebruik volgende code:
function loadXML(loaded) {
if (loaded) {
xmlNode = this.firstChild;
image = [];
total = xmlNode.childNodes.length;
for (i=0; i<total; i++) {
image[i] = xmlNode.childNodes[i].childNodes[0].firstChild.nodeValue;
}
firstImage();
} else {
content = "file not loaded!";
}
}
xmlData = new XML();
xmlData.ignoreWhite = true;
xmlData.onLoad = loadXML;
xmlData.load(xmlfile); // naam van uw xmlfile met path


plaatsen van de afbeelding

function firstImage() {
if (loaded == filesize) {
// var m is de afbeelding die je wilt zien ik gebruik hiervoor een random functie
picture.loadMovie(image[m], 1);
}
}


picture is een mc waar ik de image in plaats


hopelijk kan je hier iets meer met doen

sven

mateo)
%Europe/Berlin %961 %2005, 00:04
@monster: ja, dat is een lege movieclip op de stage (met als instance naam container_mc) :)

Monster
%Europe/Berlin %352 %2005, 09:27
zal ik anders een werkend voorbeeld posten?
alleen is dat niet de manier hoe die gebouwd moet worden.
hier wordt een SWF geladen in een lege mc.
de bedoeling is dat de afbeeldingen geladen worden uit een XML ipv een SWF

voorbeeld 360° rotatie (http://www.vop-selectie.nl/flash/rx8.rar)

dioneo
%Europe/Berlin %425 %2005, 11:13
je XML zonder attributes maar met nodes (is flash beter in)

<?xml version="1.0" encoding="iso-8859-1"?>
<auto>
<scene>
<img>img/1.jpg</img>
<tekst>test1</tekst>
</scene>
<scene>
<img>img/2.jpg</img>
<tekst>test2</tekst>
</scene>
<scene>
<img>img/3.jpg</img>
<tekst>test3</tekst>
</scene>
<scene>
<img>img/4.jpg</img>
<tekst>test4</tekst>
</scene>
</auto>

je ActionScript

var fotoArray:Array = new Array();
var fotoXML:XML = new XML();
fotoXML.ignoreWhite = true;
fotoXML.onLoad = function() {
for (i=0; i<fotoXML.firstChild.childNodes.length; i++) {
fotoArray[i] = new Array();
fotoArray[i]['image'] = fotoXML.firstChild.childNodes[i].childNodes[0].firstChild.nodeValue;
fotoArray[i]['tekst'] = fotoXML.firstChild.childNodes[i].childNodes[1].firstChild.nodeValue;
}
};
fotoXML.load("img.xml");

je hebt dan uiteindelijk een array met de naam fotoArray.
Als je de eerste afbeelding wilt tonen geef je een button de volgende actie

myButton.onPress=function(){
container_mc.loadMovie(fotoArray[0]['image'];
uitleg.text=fotoArray[0]['tekst']
}

waarbij je [0] natuurlijk kunt vervangen voor ieder cijfer dat kleiner is dan het aantal fotos in je XML. En je moet een lege clip hebben met instancename container_mc, en een tekstveld met instancename uitleg.
Ik heb je voorbeeld niet bekeken, ik heb ff geen rar hier en kan dat ook niet zomaar installeren, maar dit principe werkt altijd bij mij.
Oh ja, detail; zorg ervoor dat je afbeeldingen NIET progressive-jpeg zijn, lust flash tm 7 niet als dynamische data.

sosodave
%Europe/Berlin %519 %2005, 13:28
misschien moet je hier eens kijken..
volgens mij bedoel jij precies dit.
tutorial van macromedia
http://www.macromedia.com/support/flash/applications/jpeg_slideshow_xml/
[8ball]

JLD.
%Europe/Berlin %691 %2005, 17:36
op www.gotoandlearn.com stond ook nog een goeie, is volgens mij precies dit onderwerp :)

Laiverd
%Europe/Berlin %711 %2005, 18:04
je XML zonder attributes maar met nodes (is flash beter in)

Nog een quote (http://www.ultrashock.com/tutorials/flash5/xml_pitfall.html#refine)

Flash would then read in the XML file, which was created specifically for Flash, so it would have no white spaces. You may also consider using attributes rather than extra nodes. The more nodes you have in the XML data means the longer it will take Flash to parse the XML. It is much faster to do the enhancing before you load the data into Flash, as PHP will perform the same tasks much faster.En in mijn ervaring is dat ook zo, en is bovendien (althans dat vind ik) een parser makkelijker te schrijven.

Wat ik zelf meestal als richtlijn aan houdt: alles wat ik niet op de stage zie in attributes (properties bv.) en de rest (text) in nodes.

John