Springen naar inhoud

Actionscript 3.0


  • Log in om te kunnen reageren

#1

johannesen

    johannesen


  • >25 berichten
  • 30 berichten
  • Gebruiker

Geplaatst op 23 december 2011 - 16:51

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.

Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

Xenion

    Xenion


  • >1k berichten
  • 2606 berichten
  • Moderator

Geplaatst op 23 december 2011 - 17:34

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?

#3

johannesen

    johannesen


  • >25 berichten
  • 30 berichten
  • Gebruiker

Geplaatst op 23 december 2011 - 17:54

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.

#4

johannesen

    johannesen


  • >25 berichten
  • 30 berichten
  • Gebruiker

Geplaatst op 23 december 2011 - 18:14

http://sourcecookboo...-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.

#5

Xenion

    Xenion


  • >1k berichten
  • 2606 berichten
  • Moderator

Geplaatst op 23 december 2011 - 18:14

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.

#6

johannesen

    johannesen


  • >25 berichten
  • 30 berichten
  • Gebruiker

Geplaatst op 23 december 2011 - 18:39

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;

}

#7

Xenion

    Xenion


  • >1k berichten
  • 2606 berichten
  • Moderator

Geplaatst op 23 december 2011 - 19:10

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?

#8

johannesen

    johannesen


  • >25 berichten
  • 30 berichten
  • Gebruiker

Geplaatst op 23 december 2011 - 19:22

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.





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures