| @@ -6,7 +6,7 @@ export default class Level { | |||
| this.ctx = canvas.getContext("2d"); | |||
| this.lastTime = null; | |||
| this.raf = null; | |||
| this.minPhysFPS = 30; | |||
| this.minPhysFPS = 20; | |||
| this.minFPS = 5; | |||
| this.backgroundColor = "#87CEFA"; | |||
| @@ -87,17 +87,21 @@ export default class Level { | |||
| // We accept really low FPSes, | |||
| // but if the FPS gets too low, we want to run multiple | |||
| // physics steps in the frame. | |||
| let physdt = dt; | |||
| let nSteps = 1; | |||
| while (1 / dt < this.minPhysFPS) { | |||
| dt /= 2; | |||
| while (1 / physdt < this.minPhysFPS) { | |||
| physdt /= 2; | |||
| nSteps *= 2; | |||
| } | |||
| if (nSteps != 1) | |||
| console.log(nSteps); | |||
| if (nSteps > 1) { | |||
| console.log( | |||
| "Too long between frames for physics ("+dt.toFixed(2)+"s). "+ | |||
| "Running "+nSteps+" simulations in one frame."); | |||
| } | |||
| for (let i = 0; i < nSteps; ++i) | |||
| this.physics(dt); | |||
| this.physics(physdt); | |||
| } | |||
| this.draw(); | |||