HTML and CSS Reference
In-Depth Information
Adding in a Step Timer
In
Chapter 8
, we created a simple
FrameRateCounter
object prototype that was used to
display the current frame rate as the game was running. We are going to extend the
functionality of this counter to add in a “step timer.” The step timer will use the time
difference calculated between frames to create a “step factor.” This step factor will be
used when updating the positions of the objects on the canvas. The result will be
smoother rendering of the game objects when there are drops in frame rate, as well as
keeping relatively consistent game play on browsers and systems that cannot maintain
the frame rate needed to play the game effectively.
How the step timer works
We will update the constructor function for
FrameRateCounter
to accept in a new single
parameter called
fps
. This value will represent the frames per second that we want our
game to run:
function FrameRateCounter(fps) {
if (fps == undefined){
this.fps = 40
}else{
this.fps = fps
}
If no
fps
value is passed in, the value
40
will be used.
We will also add in two new object-level scope variables to calculate the
step
in our
step timer:
this.lastTime = dateTemp.getTime();
this.step = 1;
The
lastTime
variable will contain the time in which the previous frame completed its
work.
We calculate the
step
by comparing the current time value with the
lastTime
value on
each frame tick. This calculation will occur in the
FrameRateCounter
countFrames()
function:
FrameRateCounter.prototype.countFrames=function() {
var dateTemp = new Date();
var timeDifference = dateTemp.getTime()-this.lastTime;
this.step = (timeDifference/1000)*this.fps;
this.lastTime = dateTemp.getTime();
The local
timeDifference
value is calculated by subtracting the
lastTime
value from the
current time (represented by the
dateTemp.getTime()
return value).
To calculate the
step
value, divide the
timeDifference
by
1000
(the number of milli-
seconds in a single second), and multiply the result by the desired frame rate. If the