emscripten-core/emscripten
Auf GitHub ansehenA version of emscripten_sleep that uses requestAnimationFrame
Open
#9.574 geöffnet am 4. Okt. 2019
good first bughelp wantedwontfix
Repository-Metriken
- Stars
- (27.361 Stars)
- PR-Merge-Metriken
- (Durchschn. Merge 19T 10h) (147 gemergte PRs in 30 T)
Beschreibung
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);
}
}