browserloops-examples/lib/src/03-FixedLoopVariableRender....

52 lines
1.1 KiB
Dart

import 'dart:html';
import 'package:browserloop/game/Game.dart';
import 'package:browserloop/game/LoopExample.dart';
class FixedLoopVariableRender implements LoopExample {
static final double MS_PER_UPDATE = 1000.0;
static final double SAFE_GUARD = 500.0;
Stopwatch elapsed = new Stopwatch();
double lag = 0.0;
Game game;
num id;
FixedLoopVariableRender(this.game) {
elapsed.start();
window.requestAnimationFrame(eventloop);
}
void eventloop(num time) {
lag += elapsed.elapsedMilliseconds;
elapsed.reset();
while (lag >= MS_PER_UPDATE && elapsed.elapsedMilliseconds < SAFE_GUARD) {
update();
lag -= MS_PER_UPDATE;
}
render(lag / MS_PER_UPDATE);
id = window.requestAnimationFrame(eventloop);
}
void update() {
print('updating');
game.update();
return;
}
void render(double interp) {
print('rendering, interp:$interp');
game.draw(interp);
return;
}
void stop() {
window.cancelAnimationFrame(id);
}
void start() {
window.requestAnimationFrame(eventloop);
}
}