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); } }