under arbeid...
I en quiz applikasjon (Se side 188 i læreboken) tenker vi oss at vi har noen spørsmål med fasit:
1 Hvem er statsminister i Norge? Stoltenberg
2 Hvem er president i USA? Obama
3 Hvem var den første presidenten i USA? Washington
osv.
Hvis vi først har laget en slik quiz er det dumt at vi må skrive om hele applikasjonen hvis vi senere skulle lage en annen quiz med andre spørsmål.
Løsningen er å legge alle spørsmål og svar (og eventuelt illustrasjoner) i en egen tekstfil og bare skifte ut filen hvis vi ønsker andre spørsmål.
Applikasjonen må da kunne lese filen og hente inn informasjonen.
Tekstfilen kunne sett slik ut: (kommaseparert fil)
1, Hvem er statsminister i Norge?, Stoltenberg, stoltenberg.jpg
2, Hvem er president i Usa?, Obama, obama.jpg
... osv, osv,
Problemet her er at vi må skrive mye kode
for å lete opp kommaene i hver linje
og plukke ut tekststrengene vi trenger.
(Mye bruk av String-metodene .indexOf() og .substring() ...)
Moderne programmeringsspråk har som regel muligheter til å gjøre dette lettere ved hjelp av standarden XML, hvor vi kan legge data i en hierarkisk struktur på denne måten:
Vi lager en tekstfil quiz.xml som
angir denne strukturen i XML-format i Notepad på denne måten:
(Bruk utf-8 som koding i Lagre som - dialogen i Notepad.)
<?xml version="1.0" encoding="utf-8"?> <Quiz> <sporsmal> <tekst>Hvem er statsminister i Norge?</tekst> <fasit>Stoltenberg</fasit> <bilde>stoltenberg.jpg</bilde> </sporsmal> <sporsmal> <tekst>Hvem er president i USA?</tekst> <fasit>Obama</fasit> <bilde>obama.jpg</bilde> </sporsmal> <sporsmal> <tekst>Hvem var første president i USA?</tekst> <fasit>Washington</fasit> <bilde>washington.jpg</bilde> </sporsmal> </Quiz>
Det ser litt tungvindt ut men går greit med litt kopiering og klipping og liming.
Fordelen at dette er et standardisert format og kan leses av alle programmer som skjønner XML.
Så skal vi behandle denne filen i programmet vårt.
// Vi bruker klassene URLRequest, URLLoader og XML til å laste // filen og gjøre innholdet tilgjengelig for oss:var xmlURL: URLRequest = new URLRequest("quiz.xml"); // URL: Adresse på Internett/disk var xmlLoader: URLLoader = new URLLoader(xmlURL); // Loader laster og holder orden for ossvar quizdata: XML; // Vår variabel med all informasjon fra filen quiz.xml // Datatypen er klassen XML som kan gjøre mye for oss!// Vi henger på en lytter på loader som kjøres når den er ferdig med å lese filen:xmlLoader.addEventListener(Event.COMPLETE, xmlLastet); // Henger på vår lytter// Vår lytterfunksjon som legger innholdet i filen i vår XML variabelfunction xmlLastet(evt: Event) { quizdata=XML(evt.target.data); // Vi lagrer XML objektet i vår variabel }//xmlLastet()...
var i: int = 0;
for (var i:int = 0; i < quizdata.sporsmal.length(); i++) { trace(quizdata.sporsmal[i].tekst); trace(quizdata.sporsmal[i].fasit); trace(quizdata.sporsmal[i].bilde); }//for
Legg merke til hvordan jeg kan behandle egenskapen sporsmal i quizdata-objektet som en tabell!
Hver tabell-element er dessuten et nytt objekt med egenskapene tekst, fasit og bilde!
I quiz-eksemplet på side 188 og utover i læreboken er
informasjone lagt direkte i koden,
nå kan vi gjøre noen forandringer, se side 190 der man setter
fasit-tekst og tekst-feltet
til riktig spørsmål i det første nøkkelbildet (keyframe):
(Forutsetter her at jeg oppdaterer en variabel nr hver gang brukeren trykker for å gå til neste spørsmål.)
Bokens kode: Våre endringer for å bruke informasjon fra xml-filen: var fasit = "Brasil"; var fasit = quizdata.sporsmal[nr].fasit; txtSpørsmål.text = "Hvilket land?"; txtSpørsmal.text = quizdata.sporsmal[nr].tekst;
Tilsvarende kan gjøres i de andre nøkkelbildene.
På side 195 viser de hvordan man kan laste bilder fra fil ved
å legge en UILoader komponent med
navn bildeviser i et nøkkelbilde.
Istedenfor å legge inn og låse bildenavnene i koden, kan vi nå
hente navnet fra quizdata og bare fortelle bildeviser hvilken
bildefil den skal hente inn:
Bokens kode: | Vår endring for å bruke navn fra xml-filen: |
bildeviser.source = "bilde1.jpg"; | bildeviser.source = quizdata.sporsmal[nr].bilde; |
Egentlig trenger vi bar et nøkkelbilde i en slik
quiz-applikasjon, vi bare lager en variabel,
sporsmalsnummer, som vi ajourfører etterhvert som bruker klikker
seg fremover,
og bruker nr som indeks til å hente og
skifte ut spørsmål, fasitsvar
og bilder i de komponentene vi har lagt i nøkkelbildet!