Avatar billede camban Nybegynder
11. april 2005 - 22:26 Der er 16 kommentarer og
1 løsning

Skiftende tekst

Jeg skal lave en flash-siden, hvor teksten skifter løbende. Teksten skal læses fra en ekstern fil, fx. asp, php eller xml. Der skal være flere forskellige afsnit den randomly skifter mellem.
Hvordan ser et sådan script ud i Flash og evt. xml?
Avatar billede barklund Nybegynder
11. april 2005 - 22:28 #1
Altså, skal serveren sende et forskelligt xml-output eller skal flash'en bare læse alle teksterne og vise en tilfældig af dem?
Avatar billede camban Nybegynder
11. april 2005 - 22:30 #2
Flashen skal bare læse alle teksterne og vise en tilfældig.
Avatar billede barklund Nybegynder
11. april 2005 - 22:37 #3
Så brug XML og hav en fil som:

<texts>
  <text><![CDATA[Her er min tekst

på flere linjer

og med specialtegn: ><";'/

Slut herfra]]></text>
  ..
</texts>

Så kan du læse det i flash med XML-objektet og parse det ind i et array. Det kan du så shuffle med funktionen fra denne artikel[1]. Så kan du vise første element i arrayet i et tekstfelt.

[1] http://actionscript.dk/artikler/?a=24&s=3#shuffle

--
Morten Barklund
Avatar billede camban Nybegynder
12. april 2005 - 21:27 #4
Jeg tror jeg forstår principperne men...
Jeg har ikke lavet en xml før og forstår ikke helt men jeg har lige prøvet. Det ligner ikke helt det jeg har set andre steder. Hvor ![CDATA[ og hvorfor .. til sidst?

<?xml version="1.0" encoding="iso-8859-1"?>
<texts>
  <text><![CDATA[
Ko
]]></text>
  <text><![CDATA[
Hest
]]></text>
  <text><![CDATA[
Gris
]]></text>
  ..
</texts>
Avatar billede camban Nybegynder
12. april 2005 - 21:27 #5
Hvor = hvorfor
Avatar billede barklund Nybegynder
13. april 2005 - 09:15 #6
Hm, alt mellem CDATA kommer direkte med som det ser ud. Altså har du nu tre tekster, der hedder "{linjeskift}Ko{linjeskift}". Du har jo lavet to linjeskift, så kommer de med. skal de ikke være med, skal du fjerne dem, så det hedder <text><![CDATA[Ko]]></text> - så er teksten kun "Ko".

Du bør lave det i CDATA, for så kan du skrive alle tegn. Ellers ville du jo ikke kunne skrive for eksempel < eller ", for det ville ikke være lovlige tegn, det da ville ændre i XML-strukturen.

Det to prikker til sidst er blot for at indikere, at hernede kan der komme flere <text>-noder - prikkerne skal selvfølgelig ikke med :/

--
Morten Barklund
Avatar billede camban Nybegynder
14. april 2005 - 11:11 #7
Ok det er til at forstå. Jeg kan bare ikke få xml-teksten til at komme ind i flash

Min xml ser sådan ud
<?xml version="1.0" encoding="iso-8859-1"?>
<texts>
  <text><![CDATA[Ko  ]]></text>
    <text><![CDATA[Hest  ]]></text>
    <text><![CDATA[Gris  ]]></text>
  </texts>

Jeg har kigget på det link du gav mig og har lagt alt actionscript i en frame og har lavet en dynamisk takstboks med instance name flash_citat1.text og var citat.

Min kode i flash ser sådan ud
xml_obj = new XML();
xml_obj.ignoreWhite = true;
xml_obj.load("flash_content.xml");

xml_obj.onLoad = function(s) {
    if (s) {
        trace("xml loaded");
        flash_citat1.text = this.childNodes[0].text;
        // osv osv
    }
    else {
        trace("xml NOT loaded");
    }
}


function shuffle(a) {
    var i, r, t, l = a.length;
    for (i = 0; i < l; i++) {
        r = Math.floor(Math.random() * l);
      t = a[i];
        a[i] = a[r];
        a[r] = t;
    }
}

var citat = ["flash_citat1.text"];
shuffle(citat);
trace(citat);  // de samme elementer, bare i ny rækkefølge (måske)

I output stå der
flash_citat1.text
xml loaded

Kan du hjælpe?
Avatar billede barklund Nybegynder
14. april 2005 - 11:28 #8
Du skal læse XML'en korrekt - altså som:

xml_obj = new XML();
xml_obj.ignoreWhite = true;
xml_obj.load("flash_content.xml");
var citater = new Array();
xml_obj.onLoad = function(s) {
    if (s) {
        for (var i = 0; i < this.firstChild.childNodes.length; i++) {
            citater.push(this.firstChild.childNodes[i].firstChild.nodeValue);
        }
        shuffle(citater);
        trace("først citat er: "+citater[0]);
    } else {
        trace("xml NOT loaded");
    }
}
function shuffle(a) {
    var i, r, t, l = a.length;
    for (i = 0; i < l; i++) {
        r = Math.floor(Math.random() * l);
      t = a[i];
        a[i] = a[r];
        a[r] = t;
    }
}

Se, om ikke det giver noget output :)

--
Morten Barklund
Avatar billede camban Nybegynder
14. april 2005 - 11:53 #9
Jep, jeg kan rigtig nok se det i output men hvad med tekstboksen?

Shuffler den hver gang filen loades? Hvis jeg vil have den til af shuffler hver 25 sekund skal jeg indsætte noget tid-halløj foran shuffle(citater);?
Avatar billede camban Nybegynder
14. april 2005 - 12:05 #10
Lige et lille tillægsspørgsmål så kjeg lidt fatter hvad der foregår ;o)
Den lange remse med this.firstChild.childNodes er det xml'ens root, child og subchild der henvises til?
Avatar billede barklund Nybegynder
14. april 2005 - 12:05 #11
Så laver vi noget andet :)

xml_obj = new XML();
xml_obj.ignoreWhite = true;
xml_obj.load("flash_content.xml");
var citater = new Array();
xml_obj.onLoad = function(s) {
    if (s) {
        for (var i = 0; i < this.firstChild.childNodes.length; i++) {
            citater.push(this.firstChild.childNodes[i].firstChild.nodeValue);
        }
        visNæsteCitat();
    } else {
        trace("xml NOT loaded");
    }
}
function shuffle(a) {
    var i, r, t, l = a.length;
    for (i = 0; i < l; i++) {
        r = Math.floor(Math.random() * l);
      t = a[i];
        a[i] = a[r];
        a[r] = t;
    }
}
var interval = null;
var næste_citat = null;
function visNæsteCitat() {
    if (!næste_citat) {
        næste_citat = citater.concat();
        shuffle(næste_citat);
    }
    flash_citat1.text = næste_citat.pop();
    if (!interval) {
        interval = setInterval(visNæsteCitat, 25 * 1000);
    }
}

--
Morten Barklund
Avatar billede camban Nybegynder
14. april 2005 - 12:16 #12
Der kommer ikke så meget frem. Hvad skal instnacename og var være for min tekstboks for at der kommer noget frem på skærmen?
Avatar billede barklund Nybegynder
14. april 2005 - 12:18 #13
Ja, det er for at navigere i XML'en.

Og dit tekstfelt bør hedde flash_citat1 som instance navn - variable navn er ikke noget man bruger, vel? :)

Du kan tilføje en trace, så du kan se, om der sker noget:

xml_obj = new XML();
xml_obj.ignoreWhite = true;
xml_obj.load("flash_content.xml");
var citater = new Array();
xml_obj.onLoad = function(s) {
    if (s) {
        for (var i = 0; i < this.firstChild.childNodes.length; i++) {
            citater.push(this.firstChild.childNodes[i].firstChild.nodeValue);
        }
        visNæsteCitat();
    } else {
        trace("xml NOT loaded");
    }
}
function shuffle(a) {
    var i, r, t, l = a.length;
    for (i = 0; i < l; i++) {
        r = Math.floor(Math.random() * l);
      t = a[i];
        a[i] = a[r];
        a[r] = t;
    }
}
var interval = null;
var næste_citat = null;
function visNæsteCitat() {
    if (!næste_citat || næste_citat.length == 0) {
        trace("vægler nye citater og shuffler dem");
        næste_citat = citater.concat();
        shuffle(næste_citat);
    }
    var c = næste_citat.pop();
    trace("næste citat er: "+c);
    flash_citat1.text = c;
    if (!interval) {
        trace("sætter interval til at køre");
        interval = setInterval(visNæsteCitat, 25 * 1000);
    }
}

--
Morten Barklund
Avatar billede camban Nybegynder
14. april 2005 - 12:24 #14
Det virker nu, rigtig dejligt. Slettede den gamle tekstboks og lavede en ny og så virkede det pludseligt. Nu må jeg vist hellere kigge lidt på koden så jeg forstår bare lidt af hvad der foregår. Tusind tak...point til dig :o)
Avatar billede camban Nybegynder
14. april 2005 - 12:59 #15
Jeg har faktisk lige en sidste ting
Jeg er interesseret i at teksten fader ud når der shuffles men hvordan laver jeg den overgang. Går ud fra jeg skal have flash_citat.text._alpha = 100; ind et sted men har svært ved at gennemskue hvordan den kommer ned på 0. Me den for-løkke?
Avatar billede barklund Nybegynder
14. april 2005 - 13:48 #16
Altså teksten fader ud før den skifter? Så ville jeg nok pakke dit tekstfelt ind i et movieclip og så sætte en onEnterFrame på movieclippet, som fadede ud, skiftede teksten og fadede ind igen.
Avatar billede camban Nybegynder
14. april 2005 - 14:51 #17
Jeg prøver og ellers vender jeg tilbage med et nyt spørgsmål :o)
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