ATTENTION READERS! Lucky's VB Gaming Site is no longer active. For updated game programming information and tutorials, please visit The Game Programming Wiki!
Dus, je bent geïntresseerd om je functies te laten reageren
op bepaalde tijd intervals? Natuurlijk zou je het Timer Control
kunnen gebruiken dat in VB zit. Spijtig genoeg heeft deze timer
een resolutie van 55ms. 55ms lijkt een korte tijd voor ons maar
voor de computer is het een ergelijk lange tijd. Laat je computer
niet afzien! Gebruik exacte en hoge-resolutie timing methoden!
Private Declare Function GetTickCount
Lib "kernel32" () As Long
Ik hou van deze functie. Wanneer ik ze voor het eerst
tegenkwam was ik verbaasd. Waarom gebruikt VB deze simpele API
aanroep niet wanneer ze hun Timer Control gemaakt hebben? Ik denk
dat dit er een voor de X-files is, Mulder...
Hoedanook, deze functie geeft als waarde de lengte van de tijd
dat het systeem al aan staat(in milliseconden). Omdat sommige
computers vaak niet uitgezet worden voor enkele dagen na elkaar,
moet je zeker een Long data type gebruiken en niet een Integer,
anders kan je in de problemen geraken.
Om exact te bepalen hoeveel tijd gepasseerd is moeten we
alleen de huidige TickCount opslaan in een variabele, en dan
wachten totdat de gewenste tijd gepasseerd is:
TempTime = GetTickCount()
Do While DesiredTime > GetTickCount()
- TempTime
'Zet je code hier
Loop
Hier hebben we een voorlopige variabele TempTime genoemd
waardat we de TickCount in opslaan. We herhalen(loop) dan de
statements die we willen uitvoeren totdat het verschil tussen de
huidige tijd en de voorlopige opgeslagen tijd groter is dan de
waarde van DesiredTime. We zouden hiervoor DesiredTime een waarde
moeten geven met het aantal milliseconden, deze bepaald dan de
lengte van de herhaling(loop).
Het voorbeeld hierboven toont hoe we we een code kunnen
uitvoeren gedurende een bepaalde tijd. Hieronder is een voorbeeld
van hoe je een code uitvoert telkens je interval gepasseerd is:
ExitFunction = False
TempTime = GetTickCount()
Do While not(ExitFunction)
If DesiredTime > GetTickCount() - TempTime then
'Herzet de voorlopige(TempTime)variabele
TempTime = GetTickCount()
'Zet je code hier
End If
Loop
Deze functie zal de code uitvoeren elke keer de
interval(bepaald door DesiredTime) gepasseerd is. Om de
herhaling(loop) te verbreken, moet je gewoon een code er in
zetten die de Boolean ExitFunctien op True zet.
Op deze manier kunnen we, bijvoorbeeld, er zeker van zijn dat
onze graphics teken routines geen bepaalde frame rate
overschrijden, of het verschil in snelheid tussen systemen te
nihileren zodat je programma's op alle platformen gelijk lopen.
Ten laatste, de GetTickCount() functie can ook gebruikt worden
om de snelheid van je code te testen. Hierbij bedoel ik dat je
het kan gebruiken om te bepalen hoelang het duurt voordat een
bepaalde stuk code uitgevoerd is, zo kun je het dan aanpassen om
je programma op een optimale snelheid te laten draaien(of
vertragen, als je dat wil). Ik heb een soort stopwatch programma
geschreven dat demonstreert hoe je moet starten, stoppen,
allemaal dankzij de glorieuze GetTickCount API aanroep. Bekijk de
Files Pagina of klik hier om het nu te downloaden
Er werden geen computers gekwetst of gepijnigd tijdens het
maken van deze tutorial in overeenkomst met de Geneva
Conventie van 1949.