Actionscript 3.0

Moderators: ArcherBarry, Fuzzwood

Reageer
Berichten: 30

Actionscript 3.0

Goedemiddag allemaal,

Ik heb een vraag over het kleine stukje code hieronder.

(Er wordt een gecreerde bal verplaatst met een snelheid van 96 pixels per seconde.

De animatie is timebased dus onafhankelijk van de framesnelheid.)

var totaleTijd:int = getTimer();

var snelheid:Number = 96; // 96 pixels per seconde

addEventListener(Event.ENTER_FRAME, verplaatsBal);

function verplaatsBal(evt:Event) {

var verstrekenTijd = getTimer() - totaleTijd;

totaleTijd += verstrekenTijd;

bal.x += snelheid*verstrekenTijd/1000;

// delen door 1000 want getTimer() is in milliseconde

}


Er zijn twee regels in de code die ik niet begrijp namelijk:

var verstrekenTijd = getTimer() - totaleTijd;

totaleTijd += verstrekenTijd;


Ik ga uit van het volgende en hoop dat ik het juist heb:

Helemaal bovenaan begint getTimer te tellen in ms en steekt de waarde

in de variabele totaleTijd. Die wordt dus elke ms geüdated.

De functie verplaatsBal wordt in elk nieuw frame uitgevoerd.

Als ik het juist heb:

Waarom is verstrekenTijd = getTimer() - totaleTijd ?

Wat is hier de bedoeling van ? Deze getTimer() is ie onafhankelijk van de eerste ?

Waarom wordt erna totaleTijd vermeerderd met verstrekenTijd ?

Alvast bedankt voor alle hulp.

Gebruikersavatar
Berichten: 2.609

Re: Actionscript 3.0

Ik vermoed dat getTimer() de huidige tijd teruggeeft?

In het begin staat in totaleTijd het tijdstip waarop het programma gestart wordt.

De eerste keer dat het event aangeroepen wordt, wordt de verstreken tijd bepaald door het verschil tussen de huidige tijd (getTimer()) en de tijd waarop het programma is aangeroepen.

Dat verschil wordt bijgeteld bij totaleTijd.

totaleTijd is nu tijd_van_starten + huidige_tijd - tijd_van_starten = huidige_tijd

De volgende keer dat het event aangeroepen wordt:

verstrekenTijd = nieuwe_huidige_tijd - vorige_tijd

totaleTijd = vorige_tijd + nieuwe_huidige_tijd - vorige_tijd = nieuwe_huidige_tijd

verstrekenTijd bevat dus altijd het tijdsverschil tussen de 2 events.

totaleTijd wordt gebruikt om dat tijdsverschil te kunnen bijhouden.

Het is misschien niet al te duidelijk verwoord, maar begrijp je het zo?

Berichten: 30

Re: Actionscript 3.0

Xenion schreef:Ik vermoed dat getTimer() de huidige tijd teruggeeft?

In het begin staat in totaleTijd het tijdstip waarop het programma gestart wordt.

De eerste keer dat het event aangeroepen wordt, wordt de verstreken tijd bepaald door het verschil tussen de huidige tijd (getTimer()) en de tijd waarop het programma is aangeroepen.

Dat verschil wordt bijgeteld bij totaleTijd.

totaleTijd is nu tijd_van_starten + huidige_tijd - tijd_van_starten = huidige_tijd

De volgende keer dat het event aangeroepen wordt:

verstrekenTijd = nieuwe_huidige_tijd - vorige_tijd

totaleTijd = vorige_tijd + nieuwe_huidige_tijd - vorige_tijd = nieuwe_huidige_tijd

verstrekenTijd bevat dus altijd het tijdsverschil tussen de 2 events.

totaleTijd wordt gebruikt om dat tijdsverschil te kunnen bijhouden.

Het is misschien niet al te duidelijk verwoord, maar begrijp je het zo?
Ik begrijp de redenering maar getTimer() geeft het tijdstip niet weer maar telt in ms vanaf het moment dat ie wordt aangeroepen. Dus geeft de tijd in ms terug sinds de start van swf bestand dat moet gerund worden.

Ik heb die code nog eens bekeken maar heb de rol van getTimer() erin nog altijd niet door.

Misschien dat jij het ziet ?

Alvast bedankt.

Berichten: 30

Re: Actionscript 3.0

http://sourcecookbook.com/en/recipes/80/mi...-utils-gettimer

In bovenstaande link staat de uitleg over het tijdsinterval dat bepaald moet worden maar de rol

van de functie getTimer() snap ik niet.

Gebruikersavatar
Berichten: 2.609

Re: Actionscript 3.0

Ik begrijp de redenering maar getTimer() geeft het tijdstip niet weer maar telt in ms vanaf het moment dat ie wordt aangeroepen. Dus geeft de tijd in ms terug sinds de start van swf bestand dat moet gerund worden.
getTimer() geeft het aantal ms terug dat is verlopen sinds het programma opgestart is, dat is dus een beetje te zien als een tijdstip, relatief binnen je programma dan. (Dat is wat ik terugvind op google, ik werk zelf nooit met flash enzo.)

Het idee van die code is dat je bij elke aanroeping van het event kan bepalen hoeveel tijd er is voorbijgegaan sinds de laatste keer dat het event is aangeroepen. Daardoor kan je de verplaatsing van de bal als functie van de tijd geven en niet als functie van een frame-rate of ander intern tel-mechanisme.

Je hebt gelijk dat je niet kan zeggen dat het nu 18u15 ofzo is, maar daarin ben je ook niet geïnteresseerd. Je moet enkel weten hoeveel ms er verlopen zijn sinds de laatste verplaatsing van de bal om de nieuwe verplaatsing zodanig te berekenen dat het voor de user lijkt alsof hij een constante snelheid heeft.

Berichten: 30

Re: Actionscript 3.0

Xenion schreef:getTimer() geeft het aantal ms terug dat is verlopen sinds het programma opgestart is, dat is dus een beetje te zien als een tijdstip, relatief binnen je programma dan. (Dat is wat ik terugvind op google, ik werk zelf nooit met flash enzo.)

Het idee van die code is dat je bij elke aanroeping van het event kan bepalen hoeveel tijd er is voorbijgegaan sinds de laatste keer dat het event is aangeroepen. Daardoor kan je de verplaatsing van de bal als functie van de tijd geven en niet als functie van een frame-rate of ander intern tel-mechanisme.

Je hebt gelijk dat je niet kan zeggen dat het nu 18u15 ofzo is, maar daarin ben je ook niet geïnteresseerd. Je moet enkel weten hoeveel ms er verlopen zijn sinds de laatste verplaatsing van de bal om de nieuwe verplaatsing zodanig te berekenen dat het voor de user lijkt alsof hij een constante snelheid heeft.
var totaleTijd:int = getTimer();

Hier begint getTimer te tellen

var snelheid:Number = 96; // 96 pixels per seconde

addEventListener(Event.ENTER_FRAME, verplaatsBal);

Deze event wordt uitgevoerd bij elke frame (bv 24 keer per seconde)

function verplaatsBal(evt:Event) {

var verstrekenTijd = getTimer() - totaleTijd;

Is deze getTimer een nieuwe teller ? Zoja als de vorige (dus totaleTijd) dus 1000 ms is dan is deze toch 0 ms of toch kleiner dan de vorige ? Dan is verstrekenTijd een negatief getal ?

totaleTijd += verstrekenTijd;

Deze hangt samen met de vorige. Ik denk dat als ik de vorige regel begrijp deze logisch zal zijn.

bal.x += snelheid*verstrekenTijd/1000;

}

Gebruikersavatar
Berichten: 2.609

Re: Actionscript 3.0

Is deze getTimer een nieuwe teller ? Zoja als de vorige (dus totaleTijd) dus 1000 ms is dan is deze toch 0 ms of toch
Neen, dat is dezelfde teller, die functie geeft het aantal ms terug sinds die teller is opgestart. Dat getal zal dus groter zijn dan wat de vorige waarde was.

Werkt de code eigenlijk, of begreep je gewoon niet wat er gebeurt?

Berichten: 30

Re: Actionscript 3.0

Xenion schreef:Neen, dat is dezelfde teller, die functie geeft het aantal ms terug sinds die teller is opgestart. Dat getal zal dus groter zijn dan wat de vorige waarde was.

Werkt de code eigenlijk, of begreep je gewoon niet wat er gebeurt?
Nu heb ik het door.

getTimer() wordt gestart vanaf het begin van de flash film en totaleTijd is een

variabele die het aantal ms op dat moment opslaat dus is altijd kleiner dan getTimer().

De code werkte maar ik begreep de werking niet. Nu wel.

Bedankt voor je hulp.

Reageer