emscripten-core/emscripten
Vedi su GitHubA version of emscripten_sleep that uses requestAnimationFrame
Open
#9574 aperta il 4 ott 2019
good first bughelp wantedwontfix
Metriche repository
- Star
- (27.361 star)
- Metriche merge PR
- (Merge medio 19g 10h) (147 PR mergiate in 30 g)
Descrizione
With asyncify, emscripten_sleep becomes incredibly useful to implement game loops. However, the use of setTimeout means that the timing is inconsistent whereas requestAnimationFrame attempts to hold a consistent framerate.
Is there a version of this?
I am currently achieving it with this monkey patch:
const timeoutToAnimationId = {}
const originalSetTimeout = window.setTimeout;
const originalClearTimeout = window.clearTimeout;
window.setTimeout = (func, delay, ...args) => {
if (typeof delay === 'undefined' || delay === 0) {
const timeoutId = originalSetTimeout(() => {});
const animationId = requestAnimationFrame(() =>
{
delete timeoutToAnimationId[timeoutId];
func(...args);
});
timeoutToAnimationId[timeoutId] = animationId
return timeoutId;
} else {
return originalSetTimeout(func, delay, ...args);
}
}
window.clearTimeout = window.clearInterval = (timeoutId) => {
const animationId = timeoutToAnimationId[timeoutId];
if (typeof animationId !== 'undefined') {
cancelAnimationFrame(animationId);
delete timeoutToAnimationId[timeoutId];
} else {
return originalClearTimeout(id);
}
}