/
GameLoop.js
65 lines (39 loc) · 1 KB
/
GameLoop.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
PLAYGROUND.GameLoop = function(app) {
app.lifetime = 0;
app.ops = 0;
app.opcost = 0;
var lastTick = Date.now();
var frame = 0;
function render(dt) {
app.emitGlobalEvent("prerender", dt)
app.emitGlobalEvent("render", dt)
app.emitGlobalEvent("postrender", dt)
};
function step(dt) {
app.emitGlobalEvent("step", dt)
};
function gameLoop() {
if (app.killed) return;
requestAnimationFrame(gameLoop);
if (app.frameskip) {
frame++;
if (frame === app.frameskip) {
frame = 0;
} else return;
}
var delta = Date.now() - lastTick;
lastTick = Date.now();
if (delta > 1000) return;
var dt = delta / 1000;
app.lifetime += dt;
app.elapsed = dt;
// app.emitLocalEvent("framestart", dt);
step(dt);
// app.emitLocalEvent("framemid", dt);
render(dt);
// app.emitLocalEvent("frameend", dt);
app.opcost = delta / 1000;
app.ops = 1000 / app.opcost;
};
requestAnimationFrame(gameLoop);
};