Avatar billede stanz2002 Nybegynder
07. marts 2005 - 09:26 Der er 8 kommentarer

Preload billeder fra XML fil ?

Hej..

Jeg sidder og forsøger at lave en portefolio til vores hjemmeside, hvor man skal kunne se vores arbejde. Jeg er ret ny i flash og actionscripting, så håber I ka hjælep mig lidt :)

Jeg har en main.swf og en case.swf fil, hvor main filen er den brugeren først får frem.. ved at klikke ind under vores portefolio og klikke på et firmanavn loades case.swf filen ind. dette fungere fint..

Denne case.swf fil er baseret på en XML fil, hvor en title og en url er angivet på en række billede. Disse billeder skal vises som et slideshow.

link til case.swf filen : http://www.mindpeople.dk/xml_slideshow.zip

Filen er baseret på en tutorial fra macromedia på denne side: http://www.macromedia.com/support/flash/applications/jpeg_slideshow_xml/index.html

PROBLEMET er så at jeg mangler en form for preloader, der henter alle billeder via XML filen inden den viser slide 1. Nu preloader den kun knapperne, den grå line osv.. men ikke selve billederne.. derfor hvis man sidder på en langsom forbindelse går der lang tid inden billedet kommer frem når man klikke på næste knappen..

Hvad gør man her.. ?? Igen er jeg ret ny i flash og actionscript, så en gof forklaring vil være super..

der gives gerne flere point hvis der findes en løsning.. :)

/ Kenneth
Avatar billede _k Nybegynder
07. marts 2005 - 09:43 #1
Hvis du loader billederne ind i et mc, så kan du bruge mc'ets onLoad-metode til at tjekke om det vitterligt ER loadet ind. Det du skal gøre er altså at smide en onLoad-metode på alle de mc'er du henter ind i og derefter tjekke på om alt er hentet. Er det det, skyder du igang.

//Pseudokode
var personerIAlt:Number = 2;
var antalPersoner:Number = 0;
mc1.onLoad = function() {antalPersoner += 1;};
mc1.loadMovie("poul");

mc2.onLoad = function() {antalPersoner += 1;};
mc2.loadMovie("peter");

this.onEnterFrame = function() {
  if(if(antalPersoner >= personerIAlt) {
    //Sæt igang!
    delete this.onEnterFrame;
  }
}

...og det kan så gøres uendeligt meget mere dynamisk og lækker..... men ikke af mig "tidligt" mandag morgen ;o) Håber du fanger pointen, ellers bare spørg ind!
Avatar billede stanz2002 Nybegynder
07. marts 2005 - 11:05 #2
hej _k

Hmm... hehe, jah fatter det så ikke :)

tror heller ikke det er helt det jeg mangler..

findes der ikke en preloader, som jeg kan sætte ind forrest i den mc (case.swf), som loades ind i min main.swf, som sørger for at loade de jpg. billeder, som henvises til i min XML fil.. ??
Avatar billede _k Nybegynder
07. marts 2005 - 11:56 #3
Det er den jeg har semi-kodet for dig. Dit problem er, at du ikke kan smide en preloader på en swf der loader andre swf'er eller billeder. En standard preloader er gearet til at kigge på én og kun én fil. Den fatter ikke en bjælde af, at denne ene fil loader tusindevis af andre - det tager den ikke hensyn til. Derfor bliver du nødt til at kigge på de filer som kommer ind, altså i mit eks. sætte en slags preload, bare i form af "er jeg loadet, eller er jeg ikke loadet", på hvert mc.

Du kan i princippet også kigge på getBytesTotal() og getBytesLoaded() for hvert enkelt mc, men i mine øjne komplicerer det bare kodningen en del - og er relativt underordnet medmindre dine billeder er ret tunge.....
Avatar billede stanz2002 Nybegynder
07. marts 2005 - 12:22 #4
Hmm okay..

prøv at klikke ind på www.mindpeople.dk/client/mindpeople og gå ind under 'cases' og vælg den øverste case 'bjorn evaporator'..

Her bruger jeg loadmovie til at hente case.swf ind i et movieclip. I denne case.swf har jeg en preloader i første fram, men som sagt henter den ikke de jpg billeder, som der henvises til i XML filen.

En ny tanke! i stedet for at preloade alle billederne når case.swf hentes kan man så ikke bare preloade det enkelte billede når man trykker på næste knappen nedest til højre.. altså at der lige kommer en lille prgressbar frem som preloader det enkelte billede..

hvis det kan lade sig gøre, hvordan så :) ??

Du må meget gerne kigge i den .fla fil jeg har linket til i mit spørgsmål øverst :) det er .fla filen til case.swf filen.
Avatar billede _k Nybegynder
07. marts 2005 - 13:18 #5
ok, jeg antog at du havde alle mc'er du loade ind i til rådighed fra start. Har du ikke det, kan du jo bare loade dem ind off stage og i runtime smide dem ind på de korrekte koordinater når de skal bruges.

Den anden løsning du referer til, lyder også helt ok og måske lidt mere brugervenlig - brugeren henter ikke billeder han ikke ser.
Teknisk er det ret ligetil. Du smider bare preloaderen på det enkelte mc, og scriptet på denne preloader kan i store træk være identisk med andre preloader-scripts du ser rundt omkring. Du kan jo så i princippet konstant loade ind i det samme mc som kan agere billedholder.
Avatar billede stanz2002 Nybegynder
07. marts 2005 - 13:26 #6
okay.. tror jeg går efter den brugervenlige løsning..

men problemet er at jeg ikke har jpg billederne i en mc, men de ligger eksternt..

jeg har en preloader på den case.swf filen, som hentes ind i main.swf filen.. men den preloader ikke de 5 eksterne jpg billeder, som bruges via XML filen..

det er lidt svært at forklare.. håber du kan hente .fla filen og se hvad jeg mener.. tror næsten det er det nemmeste.. :)
Avatar billede _k Nybegynder
07. marts 2005 - 14:09 #7
Ja, jeg ville også selv have valgt den løsning ;o)

Det nemmeste for dig, vil nok være at lave en ekstra preloader. Altså en preloader som sidder på det mc du loader billeder ind i og som kaldes hver gang et billede skal udskiftes.
Den kan laves på mange måder, men jeg ville nok lave en lille tillægsfunktion til din XML-eksekvering som bliver kaldt hver gang et billede udskiftes:

function minPreloader() {
this.onEnterFrame = function() {
    if(targetClip.getBytesTotal() > 0 && targetClip.getBytesTotal() <= targetClip.getBytesLoaded()) {
      // Reference til et eller andet grafisk objekt - f.eks. en bar
    }
    else {
      // Hele billedet er så hentet
      delete this.onEnterFrame;
    }
  }
}

..regner med du selv kan smide scriptet ind og få det tilpasset?
Avatar billede stanz2002 Nybegynder
07. marts 2005 - 15:25 #8
hehe.. jah så tror jeg desværre du regner forkert :)

er helt ny i det her programmeringssprog, så skal desværre ha det skåret ud i pap..

Jeg har nedenstående kode i det frame hvor XML fil hentes.. Håber du kan smide dit kode ind i det for mig..

slides_xml = new XML();
slides_xml.onLoad = startSlideShow;
slides_xml.load("cases/empty_xml.xml");
slides_xml.ignoreWhite = true;
//
// Show the first slide and intialize variables
function startSlideShow(success) {
    if (success == true) {
            rootNode = slides_xml.firstChild;
            totalSlides = rootNode.childNodes.length;
            firstSlideNode = rootNode.firstChild;
            currentSlideNode = firstSlideNode;
            currentIndex = 1;
            updateSlide(firstSlideNode);

    }
}
//
// Updates the current slide with new image and text
function updateSlide(newSlideNode) {
    imagePath = newSlideNode.attributes.jpegURL;
    slideText = newSlideNode.firstChild.nodeValue;
    loadMovie(imagePath, targetClip);
}
//
// Event handler for 'Next slide' button
next_btn.onRelease = function() {
    nextSlideNode = currentSlideNode.nextSibling;
    if (nextSlideNode == null) {
        break;
    } else {
        currentIndex++;
        updateSlide(nextSlideNode);
        currentSlideNode = nextSlideNode;
    }
};
//
// Event handler for 'Previous slide' button
back_btn.onRelease = function() {
    previousSlideNode = currentSlideNode.previousSibling;
    if (previousSlideNode == null) {
        break;
    } else {
        currentIndex--;
        currentSlideNode = previousSlideNode;
        updateSlide(previousSlideNode);
    }
};
stop();
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