A lightweight JavaScript game engine
git clone git://soophie.de/game-engine
7
this.height = height || 600;8
this.fps = 1000 / (fps || 60);9
this.then = Date.now();10
this.running = false;11
this.canvas = document.createElement('canvas');12
scaleCanvas(this.canvas, this.width, this.height);13
this.g = this.canvas.getContext('2d');
20
for(const sprite of this.sprites) {21
await sprite.load();22
}22
if(this.onspriteload) {23
this.onspriteload();23
this.running = true;24
if(this.oninit) {25
this.oninit();26
}27
requestAnimationFrame(this.loop.bind(this));28
this.update();29
this.render(this.g);30
}31
quit() {32
this.running = false;33
if(this.onquit) {34
this.onquit();35
}36
}37
loop() {30
requestAnimationFrame(this.loop.bind(this));31
this.now = Date.now();32
this.elapsed = this.now - this.then;33
if(this.elapsed > this.fps) {34
this.then = this.now - (this.elapsed % this.fps);35
for(const event of this.events) {36
if(this['on' + event.type]) {37
this['on' + event.type](event);38
try {39
if(this.running) {40
requestAnimationFrame(this.loop.bind(this));41
this.now = Date.now();42
this.elapsed = this.now - this.then;43
if(this.elapsed > this.fps) {44
this.then = this.now - (this.elapsed % this.fps);45
for(const event of this.events) {46
if(this['on' + event.type]) {47
this['on' + event.type](event);48
}49
}50
this.update();51
this.render(this.g);52
this.events = [];53
}54
}40
this.update();41
this.render(this.g);42
this.events = [];55
}56
catch(error) {57
console.error(error);58
this.running = false;59
}60
}61
update() {