use setTimeout instead of requestAnimationFrame for 60 fps update

This commit is contained in:
2022-04-17 12:26:01 +02:00
parent 7c5f43f152
commit 893158e136

View File

@@ -256,9 +256,8 @@ export default function MicroW8(screen, config = {}) {
} }
try { try {
let now = Date.now();
let restart = false; let restart = false;
if (now >= nextFrame && !isPaused) { if (!isPaused) {
let gamepads = navigator.getGamepads(); let gamepads = navigator.getGamepads();
let gamepad = 0; let gamepad = 0;
for (let i = 0; i < 4; ++i) { for (let i = 0; i < 4; ++i) {
@@ -286,7 +285,7 @@ export default function MicroW8(screen, config = {}) {
} }
let u32Mem = U32(memory.buffer); let u32Mem = U32(memory.buffer);
u32Mem[16] = now - startTime; u32Mem[16] = Date.now() - startTime;
u32Mem[17] = pad | gamepad; u32Mem[17] = pad | gamepad;
if(instance.exports.upd) { if(instance.exports.upd) {
instance.exports.upd(); instance.exports.upd();
@@ -302,13 +301,14 @@ export default function MicroW8(screen, config = {}) {
buffer[i] = palette[memU8[i + 120]] | 0xff000000; buffer[i] = palette[memU8[i + 120]] | 0xff000000;
} }
canvasCtx.putImageData(imageData, 0, 0); canvasCtx.putImageData(imageData, 0, 0);
nextFrame = Math.max(nextFrame + timePerFrame, now);
} }
let now = Date.now();
nextFrame = Math.max(nextFrame + timePerFrame, now);
if (restart) { if (restart) {
runModule(currentData); runModule(currentData);
} else { } else {
window.requestAnimationFrame(mainloop); window.setTimeout(mainloop, Math.round(nextFrame - now))
} }
} catch (err) { } catch (err) {
config.setMessage(cartridgeSize, err.toString()); config.setMessage(cartridgeSize, err.toString());