Poczytałem jakieś artykuły o podobnej tematyce do mojego problemu i doszedłem do wniosku, że źle zrobiłem pętlę główną gry. W jednym z artykułów które przeczytałem znalazłem przykład pętli która pomimo zmian FPS ciągle animuje tak samo.
fps = {
lastFrameTimeMs: 0,
maxFPS: 60,
delta: 0,
timestep: 1000 / 60,
fps: 60,
framesThisSecond: 0,
lastFpsUpdate: 0
}
function GameLoop(timestamp){
_t = this;
if(timestamp < g.fps.lastFrameTimeMs + (1000 / g.fps.maxFPS)){
requestAnimationFrame(GameLoop);
return;
}
g.fps.delta += timestamp - g.fps.lastFrameTimeMs;
g.fps.lastFrameTimeMs = timestamp;
if(timestamp > g.fps.lastFpsUpdate + 1000){
g.fps.fps = 0.25 * g.fps.framesThisSecond + 0.75 * g.fps.fps;
g.fps.lastFpsUpdate = timestamp;
g.fps.framesThisSecond = 0;
}
g.fps.framesThisSecond++;
var numUpdateSteps = 0;
while(g.fps.delta >= g.fps.timestep){
_t.g.hero.go(g.fps.timestep);
g.fps.delta -= g.fps.timestep;
if(++numUpdateSteps >= 240){
panic();
break;
}
}
$(".fps").html("FPS: " + parseInt(g.fps.fps));
g.draw.HeroAnimation();
g.draw.MapAnimation();
g.keyboard.UseKey();
if(!isset(this.g.cookie)){
if(g.fps.fps < 35){
if(g.setting.quality == 1){
LowSettings();
}
}else if(g.fps.fps > 35){
if(g.setting.quality == 0){
NormalSettings();
}
}
}
req = requestAnimationFrame(GameLoop);
}
function StartGameLoop(){
req = requestAnimationFrame(GameLoop);
}
Jednak pomimo tej zmiany animacja dalej wygląda tragicznie na komputerach innych niż te z windowsem 10. Czy mógłby mnie ktoś naprowadzić, jak powinno się taką pętle dobrze napisać? Albo chociaż jaki błąd popełniam w tym wypadku