Avatar billede Slettet bruger
06. marts 2009 - 14:11 Der er 1 kommentar

Flere timere i AS3

Hej eksperter.

Jeg er ved at færdiggøre en streamingafspiller - men har et problem med nogle "annotations", i dette tilfælde er det små, separate swf-filer der indlæses løbende.

[BESKRIVELSE]
En XML-fil definerer f.eks. at 15 sekunder efter start skal en bjælke med "Breaking News | Obama kommer til Danmark 13. maj" og skal vises i 5 sekunder.
Efter 30 sekunder kommer så måske en ny bjælke ind og siger "I studiet: Helle Thorning Schmidt".

[PROBLEM]
Jeg kan ikke greje, hvordan dynamiske timere oprettes... burde dette ikke virke? Altså hvor jeg laver en stribe timere og fylder dem ind i et array (annotationtimers.push(annotationtimer)

public function indlaesannotations() {
  // Indlæs nu annotations
  var aktuelannotation = 0;
  var annotationtimer:Timer;
  var annotationtimers:Array = new Array();
  for (var i=0; i<konfiguration.annotations.length; i++) {
    trace(i+" kasser øl");
    if (konfiguration.annotations[i].recurrent == true || konfiguration.annotations[i].recurrent == "true") {
      annotationtimer = new Timer(Number(konfiguration.annotations[i].thedelay)*1000);
    } else {
      // Kør kun hændelsen een gang
      annotationtimer = new Timer(Number(konfiguration.annotations[i].thedelay)*1000, 1);
    }
    // Start timeren
    annotationtimer.addEventListener("timer", visannotation);
    annotationtimer.start();
    // Læg dem ind i et array, så vi kan have flere på samme tid
    annotationtimers.push(annotationtimer);
  }
}

public function visannotation(event:TimerEvent) {
  if (connected) {
    annotationloader = new Loader();
    annotationloader.name = "annotation_mc";
    // Indlæs swf-filen
    annotationloader.load(new URLRequest("."+konfiguration.annotations[aktuelannotation].annotationskin));
    annotationloader.contentLoaderInfo.addEventListener(Event.COMPLETE, annotationLoadComplete);
    annotationloader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, annotationFejl);
    annotationdurationtimer = new Timer(konfiguration.annotations[aktuelannotation].theduration*1000, 1);
    annotationdurationtimer.addEventListener("timer", fjernannotation);
    annotationdurationtimer.start();
    if (video.visible == true) {
      // Annotations skal kun vises, såfremt videoplaceholderen OGSÅ er synlig.
      annotations_mc.visible = true;
    }
  }
}
       
public function fjernannotation(event:TimerEvent) {
  annotationdurationtimer.stop();
  annotations_mc.visible = false;
  annotationloader.unload();
}

public function annotationLoadComplete(e:Event) {
  annotations_mc.addChild(annotationloader);
  e.currentTarget.content.placeholderniveau1_mc.placeholderniveau2_mc.textplaceholder_txt.htmlText = konfiguration.annotations[aktuelannotation].line1;
  e.currentTarget.content.placeholderniveau1_mc.placeholderniveau2_mc.textplaceholder_txt.textColor = "0x"+konfiguration.annotations[aktuelannotation].fontcolor;
}


Skal timerobjekterne i stedet oprettes under separate variabler - og disse variabler pushes ind i et array? (Blot for at vi kan holde styr på dem). Der sker blot det, at kun FØRSTE annotation vises (og forsvinder igen)
Avatar billede andersbro Nybegynder
06. marts 2009 - 14:25 #1
Det er, som du selv skriver, fordi du skal oprette din timer-variabel i dit for-loop.

var annotationtimer:Timer = new Timer(Number(konfiguration.annotations[i].thedelay)*1000);

Da du senere kun refererer til dine timere via variablen annotationtimers, er det heller ikke noget problem.
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