Make frame times more consistent

This commit is contained in:
Skyler Lehmkuhl 2024-12-25 14:42:21 -05:00
parent 269eaf0a04
commit a668b8a4c7
1 changed files with 16 additions and 2 deletions

View File

@ -73,6 +73,7 @@ let fileExportPath = undefined
let state = "normal" let state = "normal"
let playing = false let playing = false
let lastFrameTime;
let clipboard = [] let clipboard = []
@ -2747,6 +2748,7 @@ function playPause() {
} }
} }
} }
lastFrameTime = performance.now()
advanceFrame() advanceFrame()
} else { } else {
for (let audioLayer of context.activeObject.audioLayers) { for (let audioLayer of context.activeObject.audioLayers) {
@ -2762,11 +2764,21 @@ function playPause() {
function advanceFrame() { function advanceFrame() {
context.activeObject.advanceFrame() context.activeObject.advanceFrame()
updateLayers() updateLayers()
updateMenu()
updateUI() updateUI()
if (playing) { if (playing) {
if (context.activeObject.currentFrameNum < context.activeObject.maxFrame - 1) { if (context.activeObject.currentFrameNum < context.activeObject.maxFrame - 1) {
setTimeout(advanceFrame, 1000/config.framerate) const now = performance.now()
const elapsedTime = now - lastFrameTime;
// Calculate the time remaining for the next frame
const targetTimePerFrame = 1000 / config.framerate;
const timeToWait = Math.max(0, targetTimePerFrame - elapsedTime); // Ensure no negative timeout
// const timeToWait = 1000 / config.framerate
console.log(timeToWait)
// Update lastFrameTime to the current time
lastFrameTime = now + timeToWait;
setTimeout(advanceFrame, timeToWait)
} else { } else {
playing = false playing = false
for (let audioLayer of context.activeObject.audioLayers) { for (let audioLayer of context.activeObject.audioLayers) {
@ -2776,6 +2788,8 @@ function advanceFrame() {
} }
} }
} }
} else {
updateMenu()
} }
} }