Stikkord (og noen kommentarer) til
som må kunnes og vil bli gjenstand for vurdering.
Med interaktivitet mener vi at bruker kan gi input til applikasjonen og styre hva applikasjonen skal gjøre.
For å få til dette må vi ha input-komponenter (knapper, tekstfelt, nedtrekksbokser osv.) som må
kobles til kode vi lager og legger i
lytter-funksjoner.(Vi kan enten bruke standard komponenter fra Components dialogen, eller lage våre egne med new Symbol og velge Button istedenfor MovieClip.)
Denne tilkoblingen gjøres ved å koble sammen eksempelvis et museklikk (hendelse/event) til en knapp med en lytter-funksjon, omtrent slik:
knapp.addEventListener(MouseEvent.CLICK,lytterfunksjon);Det registreringsfunksjonen addEventListener gjør er å sette opp en "meldingsforbindelse" mellom deler av systemet og det kan illustreres omtrent slik:
Vi kommer tilbake til dette, men det som står i læreboken er ikke helt riktig, så en liten presisering:
Kompilerte programfiler:
- Exe-filer i windows: Oversatt (kompilert) fra kildekode (som vi skriver) til maskinkode (som mikroprosessoren forstår).
Et eget program, en kompilator, gjør denne oversettelsen.
(Slike filer kan bare kjøres for ett enkelt operativsystem og en spesiell prosessor.
Til gjengjeld går slike program svært raskt.)- .swf-filer i Flash og .jar/.class i Java: Oversatt fra kildekode til maskinkode for en virtuell maskin (Flash Player, Java Virtual Machine, JavaScript virtuelle maskiner (V8, Rhino, ...),
som er en "kunstig" maskin som simuleres i et eget program i den datamaskinen vi bruker.
(Fordelen med virtuelle maskiner er at programmene kan kjøres i forskjellige operativsystem (Windows, MacOS, Unix/Linux)
på forskjellige mikroprosessorer. For noen 10-år siden gikk slike programmer en del langsommere enn ren maskinkode, men de beste
virtuelle maskinene (Java Virtual Machine) kjører idag nesten like raskt som en ordentlig maskin. (Flash går fremdeles en del langsommere...))Tokede programfiler:
Tolkede programmer kjøres ikke av en virtuell maskin, men av et eget program (oversetter/tolker) som kjører kildekoden direkte,
og oversetter til maskinkode, linje for linje. Da programmet må oversettes fra kildekode hver gang det kjøres, går dette
anslagsvis 10-100 ganger langsommere enn kompilerte programfiler, enten de er maskinkode for reelle eller virtuelle prosessorer.Eksempler på språk som blir tolket er Basic, JavaScript, php,
Feilen i boken er at de sier at Flash Player tolker og oversetter. Flash Player inneholder faktisk en virtuell maskin, Tamarin, og har derfor
ikke en tolk/oversetter. .swf-filer er derfor ikke kildekode, men er blanding av data og maskinkode for Tamarin.)
Knapper (button) er eksempel på Komponenter, det vil si input-dingser vi kan plassere på skjermen for å gi brukeren mulighet til interaktivitet.
Vanlige komponenter er Button, TextInput, TextArea, ComboBox, Radiobutton, CheckBox, NumericStepper, Slider, ProgressBar, Slider, ColorPicker,...
Se i dialogen som kommer etter menyvalget: Window, Components !
(Der har vi standard knapper, hvis vi ikke ønsker spesielt utseende og lager dem selv med new Symbol og velger Button istedenfor MovieClip.)
Ligger i klassen MouseEvent.
- CLICK
- MOUSE_DOWN (Obs: Trykkfeil i boken, UP og DOWN skal være MOUSE_UP og MOUSE_DOWN !)
- MOUSE_UP
- MOUSE_MOVE
- MOUSE_OVER
- MOUSE_OUT.
Kan navigere på tidslinjen til et MovieClip objekt med navn "navn" med metodene (funksjoner i objekt)::
- navn.stop()
- navn.play()
- navn.gotoAndPlay(ramme-nummer) eller navn.gotoAndPlay(ramme-navn)
- navn.gotoAndStop(ramme-nummer) eller navn.gotoAndStop(ramme-navn)
- navn.nextFrame()
- navn.prevFrame()
Kan få tak i viktig informasjon med egenskapene:
- navn.currentFrame
- navn.totalFrames
(Kan også hoppe til en navngitt scene, istedenfor en ramme.)
knapp1.addEventListener(MouseEvent.CLICK, gaTilEn); knapp2.addEventListener(MouseEvent.CLICK, gaTilTo); knapp3.addEventListener(MouseEvent.CLICK, gaTilTre); knapp4.addEventListener(MouseEvent.CLICK, gaTilFire); function gaTilEn(evt: MouseEvent):void { innhold.gotoAndStop(1); }//gaTilEn() function gaTilTo(evt: MouseEvent):void { innhold.gotoAndStop(2); }//gaTilTo() function gaTilTre(evt: MouseEvent):void { innhold.gotoAndStop(3); }//gaTilTre() function gaTilFire(evt: MouseEvent):void { innhold.gotoAndStop(4); }//gaTilFire()Eksempel på kode hvor vi velger nøkkelrammer med bare to knapper, right og left:
var nr: int = 1; //Husker hvor vi er. Bilde 1 default left.addEventListener(MouseEvent.CLICK, gaTilVenstre); right.addEventListener(MouseEvent.CLICK, gaTilHoyre); function gaTilVenstre(evt: Event):void{ nr--; if(nr==0) { nr=4; }//if innhold.gotoAndStop(nr); }//gaTilVentre() function gaTilHoyre(evt: Event):void{ nr++; if(nr==5) { nr=1; }//if innhold.gotoAndStop(nr); }//gaTilHoyre()Eksempel på kode hvordan vi kan klare oss med bare en lytterfunksjon:
left.addEventListener(MouseEvent.CLICK, pilknappLytter); right.addEventListener(MouseEvent.CLICK, pilknappLytter); function pilknappLytter(evt:MouseEvent):void { if(evt.target.name=="left") { // target er referanse til sender-objektet nr--; if(nr==0) { nr=4; }//if første } else { nr++; if(nr==5) { nr=1; }//if siste }//if left/right innhold.gotoAndStop(nr); }//pilknappLytter
- Flytte instansen "firkant" til posisjon (50,20) : firkant.x=50; firkant.y=20;
- Instanser har i tillegg til x og y andre egenskaper som kan endres:
- rotation
- scaleX
- scaleY
- alpha
Hvis programmet skal ta vare på og huske tall-verdier, kan vi legge dem i variabler, som vi deklarerer(definerer) med "var":
var rammenummer: int = 1; //Variabelen rammenummer er heltall (integer) og har startverdi 1.var poeng: int = 0; //Variabelen poeng er heltall og har startverdi 0.Variabler kan etter deklarering refereres til med navn og endres med tilordning:
poeng = poeng + 1; // poeng økes med 1.poeng++; // Kortversjon av instruksjonen over, poeng økes med 1.poeng = poeng + 10; // poeng økes med 10.poeng+=10; // Kortversjon av instruksjonen over, poeng økes med 10.
For å kunne gjøre valg underveis i et program avhengig av hva som skjer underveis, må vi ha valginstruksjoner :
Den vanligste er if:
if(bildenummer > navn.totalFrames) { //Hvis vi blar forbi siste bilde bildenummer = 1; //Justere til første bilde }if(poeng == 1000) { //Hvis poengsum er 1000 poeng = poeng + 200; //Gi 200 poeng i bonus! } else { //Ellers poeng = poeng + 10; //Gi bare 10 poeng }if(ball.x > 600) { //Hvis ballen er utenfor høyre begrensning fart=-fart; //Sett farten til motsatt retning }Vanligste logiske tester:
- Mindre enn: <
- Større enn: >
- Mindre enn eller lik: <=
- Større enn eller lik: >=
- Forskjellig fra: !=
Se side 192. Merk deg at boken bruker tungvindte tallkoder, for eksempel 37 for venstre piltast, istedenfor å bruke innebygde navn på piltaster:
Navn på taster ligger i Keyboard-klassen, tastatur-hendelser i KeyboardEvent-klassen.
stage.addEventListener(KeyboardEvent.KEY_DOWN, tastBleTrykket); //Registrerer lytterfunksjonenfunction tastBleTrykket(evt: KeyboardEvent): void { //Lytterfunksjon: var tastekode = evt.keyCode; //Husker koden som følger med hendelsesparameteren if(tastekode == Keyboard.RIGHT) { //Hvis høyre piltast er trykket ball.x += 10; //Flytt ballen 10 til høyre }else if(tastekode == Keyboard.LEFT) { //ellers, hvis venstre piltast er trykket ball.x -= 10; //Flytt ballen 10 til venstre }else if(tastekode == Keyboard.UP) { //Osv. for oppover og nedover... ball.y -= 10; }else if(tastekode == Keyboard.DOWN) { ball.y += 10; }else { //Her kunne vi fanget opp andre tastetrykk... }//if }//tastBleTrykket()
Hvis vi har lagt inn komponenten UILoader (Window, Components) og gitt den instans-navnet "bildeviser",
kan vi få denne komponenten til å laste inn bildet i filen bilde_x.jpg med kommandoen:bildeviser.source = "bilde_x.jpg";Se eksempel side 195.