Funksjoner, programmeringsfeil, hendelser og komponenter

Løsningsskisser


Del 1 - Teori

Leveres på papir når ferdig - Ingen hjelpemidler

Oppgave 1

Gi et eksempel der det er rimelig å ha en lytterfunksjon koblet til flere komponenter.

Radioknapper, sjekkbokser, piltaster og tastatur-behandling er eksempler.

Hensikten er ofte å unngå at samme kode blir gjentatt i flere forskjellige lytterfunksjoner.

Oppgave 2

Hvilken egenskap i et hendelsesobjekt (Event) kan vi bruke til å finne ut hvilken komponent som utløste hendelsen?

currenttarget: Denne egenskapen inneholder komponenten som utløste hendelsen.

(target: Denne egenskapen er komponenten som leverer hendelsen. Eksempelvis kan stage fange opp
KeyboardEvent fra alle tastene i tastaturet.
Da er target lik stage, som
leverer hendelsen, og currenttarget tasten som utløste hendelsen.)

Oppgave 3

Hvilke to hovedtyper av programmeringsfeil har vi?

Logiske: Feil som gjør at koden ikke gjør det den skal gjøre etter spesifikasjonene.

Syntaktiske: Skrivefeil som bryter med ortografiske (staving) og semantiske (grammatikalseke) regler for programmeringsspråket.

Oppgave 4

Når brukeren taster Enter-knappen i et tekstfelt, med navn inntastingTf, ønsker du å få utført koden i en funksjon med navn inntastingFerdig.

Skriv nødvendig kode for å koble opp en lytterfunksjon og kod lytterfunksjonen.

inntastingTf.addEventListener(KeyboardEvent, inntastingFerdig);
function inntastingFerdig(evt:KeyboardEvent):void {

   if(evt.keyCode == Keyboard.ENTER ) {

       // gjør det som skal gjøres

   }//if

}//inntastingFerdig()

Oppgave 5

Når vil en lytterfunksjon tikk() bli utført, hvis vi har gjort denne oppkoblingen:

stage.addEventListener(Event.ENTER_FRAME, tikk);
Hendelsen Event.ENTER_FRAME skjer hver gang FlashPlayer oppdaterer "filmen",

dvs. like mange ganger i sekundet som gjeldende framerate. (24 frames/sekund standard.)
Legg  merke til at dette skjer like ofte selv om applikasjonen bare bruker en enkelt frame!

(Eller har stoppet opp i en frame pga. en stop() funksjon.)

 

Oppgave 6

En sjekkboks med navn ekstrautstyrChk er koblet til lytterfunksjonen sjekkBoksSjekker().
Skriv kode for lytterfunksjonen slik at den boolske variabelen
med navn bonus blir satt til true hvis sjekkboksen er haket ut.

function sjekkBoksSjekker(evt: Event) : void {

   if ( ekstrautstyrChk.selected) {

      bonus = true;

   }//if

}//sjekkBoksSjekker()

Oppgave 7

Du har tre radioknapper som på skjermen er merket Alternativ 1, Alternativ 2 og Alternativ 3.
Radioknappene har navnene A1_Rb, A2_Rb og A3_Rb.

Radioknappene er allerede koblet opp mot lytterfunksjonen alternativValgt().

Skriv kode for lytterfunksjonen alternativValgt() slik at funksjonen utforEn() blir utført
hvis Alternativ 1 er valgt, utforTo() blir utført hvis Alternativ 2 er valgt og utforTre()
blir utført hvis Alternativ 3 er valgt.

function alternativValgt(evt: Event): void {

   if (evt.target == A1_Rb ) {       // Eventuelt bare:  if( A1_Rb.selected ) {...

      utforEn();

   else if (evt.target == A2_Rb) { 

      utforTo();

   else if (evt.target == A3_Rb) {

      utforTre();

   }//if

}//alternativValgt()

Oppgave 8

Hvilken egenskap i Slider og NumericStepper kan brukes for å finne ut hva brukeren har valgt i disse to komponentene?

Egenskapen .value.

Oppgave 9

Hvilke egenskaper i ComboBox kan du bruke for å finne ut hva brukeren har valgt i denne komponenten?

Egenskapene: .selectedItem og .selectedIndex


Del 2 - Praktisk oppgave:

Alle hjelpemidler.

Leveres i It's Learning-mappen "Prøve 04.03 - Praktisk del"

Lag en applikasjon som ser omtrent slik ut:

I den numeriske stepperen skal brukeren kunne velge et tall fra og med 1 til og med 10.

I komboboksen skal brukeren kunne velge enten Mynt eller Terning.

Når knappen "Utfør eksperiment!" trykkes skal applikasjonen simulere kast med
enten mynt eller terning så mange ganger som angitt i den numeriske stepperen.

I tekstfeltet nederst skal applikasjonen skrive ut gjennomsnittsverdien av kastene.

( Et terningkast simuleres som kjent omtrent slik: Math.floor(Math.random()*6)+1 .)

Skriver her bare bruddstykker av de viktigste kodebitene:

// Nok med bare en lytter på knapp:
utfor_Btn.addEventListener(MouseEvent.CLICK, knappKlikket); 
function knappKlikket(evt: Event): void {

   var type: int = type_Cb.selectedIndex;

   var sum: int = 0;

   var gs:  Number = 0.0;
   for(var i:int = 0; i< antallkast_Ns.value; i++) {

      if (type == MYNT) {                      // eller selectedItem.label=="Mynt"

         sum += int(Math.random()*2);

      } else if (type == TERNING) {

         sum += int(Math.random()*6+1);

      }else {

         // feilmelding/utvidelser

      }//if
   gs = sum/antallkast_ns.value;

   resultat_Tf.text = gs.toPrecision(2);

}//knappKlikket()