Toon posts:

[Flash MX '04]Dynamische tijdbalk,serverside script

Pagina: 1
Acties:

Verwijderd

Topicstarter
Goeieavond,

de titel is onvolledig maar er kon niet meer in :)

Het gaat om een flash movie game, gemaakt in Flash MX '04, er worden vragen gesteld die opgehaald worden uit een mysql database dmv. PHP.

Je hebt maar een bepaalde tijdsduur om die vraag te beantwoorden, het probleem is, ik heb een lopende tijdbalk of hoe je zoiets ook noemt. Die verkleurt van groen naar rood naarmate de tijd opraakt. Dit heb ik in flash simpel gemaakt door een shape tween te maken, een vierkantje dat uitgerokken wordt en rood wordt. (Mijn excuses voor de vreemde omschrijving)

Nu werkt dit natuurlijk wel, alleen zou ik dit willen "vereenvoudigen" door aan die tijdbalk via de database een aantal seconden mee te geven.

Als er over de vraag 20 sec. nagedacht mag worden dan wordt het getal 20 uit de database gehaald, dat ophalen is geen probleem maar de actionscript die er dan voor zorgt dat die tijdbalk dan ook daadwerkelijk 20 seconden loopt wel.

Wie heeft zoiets al eens gemaakt, of wie weet hoe dit in zijn werk gaat?

  • LB Back
  • Registratie: November 2004
  • Laatst online: 14-03 23:22
Dat kun je het beste met getTimer doen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
tijdUitDb = 20;
//
this.onEnterFrame = function() {
    tijdVanafBegin = getTimer();
    if (aftellen) {
        timer = tijdUitDb-Math.floor((tijdVanafBegin-tijdVanafEvent)/1000);
        if (timer == 0) {
            aftellen = 0;
        }
    }
};
//
startVraagButton.onRelease = function() {
    aftellen = 1;
    tijdVanafEvent = getTimer();
};
maak een dynamisch tekstveld met als Var: timer
en een button met instancename: startVraagButton
en plak bovenstaande code in een keyframe.

  • sanderb
  • Registratie: November 2000
  • Laatst online: 08:05
als je het getal 20 uit de database haalt, zou je flash terug kunnen laten tellen naar 0.
Je kan dit doen door de getTimer functie te gebruiken bijvoorbeeld. Die functie haalt het aantal miliseconden op dat er verstreken is sinds de start van de swf.
Je zou het nog makkelijker kunnen doen door een interval te gebruiken:

Flash ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// de 20 seconden uit je database
var timeToLive:Number =  20;
//
//een interval zetten, deze roept de functie telAf() elke 1000 ms aan.
var timerTeller:Number = setInterval(telAf, 1000);
//
//de functie telAf
telAf = function(){
    // 1 van timeToLive aftrekken
    timeToLive--;
    trace(timeToLive)
    //als 0 bereikt dat het interval stoppen en iets uitvoeren
   if (timeToLive==0){
      clearInterval(timerTeller);
     //hier nog eventuele actie..
  }
}


Je zou je geanimeerde balkje bijvoorbeeld elke seconde een frame verder kunnen sturen met
Flash ActionScript:
1
tijdBalk.nextFrame();

" A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools. " - Douglas Noel Adams


  • LB Back
  • Registratie: November 2004
  • Laatst online: 14-03 23:22
LOL ik wilde bijna zeggen dat getTimer makkelijker was dan setInterval :D

  • sanderb
  • Registratie: November 2000
  • Laatst online: 08:05
het maakt op zich natuurlijk geen fluit uit..bij beide bereik je hetzelfde doel.

Ik gebruik zelf voornamelijk intervals. Als je heel veel dingen tegelijkertijd op je stage wil laten gebeuren heb je qua performance meer controle als je een interval gebruikt.

De functie die door de interval wordt aangeroepen wordt maar 20 keer uitgevoerd.. bij een onEnterframe zul je dat dus waarschijnlijk 20*25 = 500 keer doen. (Er vanuit gaande dat TS 25fps gebruikt vanwege animatie)
Als je de interval niet meer nodig hebt gooi je het weg.

Bovendien kan de TS de 1000ms uit de interval makkelijker gebruiken om exact zijn animatie van de tijd te laten afspelen. (of natuurlijk per halve seconde bij 500ms)

" A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools. " - Douglas Noel Adams


  • LB Back
  • Registratie: November 2004
  • Laatst online: 14-03 23:22
Das waar. Normaal zou ik een delete onEnterFrame gebruiken als ik hem niet meer nodig had. Als er niet teveel uitgerekend moet worden heb ik het idee dat onEnterFrame nauwkeuriger is trouwens, bij zware berekeningen setInterval.
Pagina: 1