运行 以 60fps 运行
Run function at 60fps
我目前使用 setInterval( () => {}, 16 )
到 运行 我的代码为 60fps,但这使得代码 运行 为 62.5fps,这使得游戏动作向前跳跃的速度提高了两倍每秒几帧。使用interval 17让游戏运动每隔一段时间就卡住一帧。
我怎样才能运行 代码真正以 60fps 的速度获得最大的平滑度?
使用Window.requestAnimationFrame([callback])
这样,无论显示器是 30hz、60hz 还是 120hz 或更高,您的应用程序都会在渲染时被调用。
如果 MDN 文档不够清楚,请参阅 https://css-tricks.com/using-requestanimationframe/ 中的示例了解如何使用它。
var globalID;
function repeatOften() {
$("<div />").appendTo("body");
globalID = requestAnimationFrame(repeatOften);
}
globalID = requestAnimationFrame(repeatOften);
$("#stop").on("click", function() {
cancelAnimationFrame(globalID);
});
$("#start").on("click", function() {
globalID = requestAnimationFrame(repeatOften);
});
div {
width: 10px;
height: 10px;
background: orange;
float: left;
}
button {
position: absolute;
top: 20px;
left: 20px;
}
#stop {
left: 100px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id="start">start</button>
<button id="stop">stop</button>
我目前使用 setInterval( () => {}, 16 )
到 运行 我的代码为 60fps,但这使得代码 运行 为 62.5fps,这使得游戏动作向前跳跃的速度提高了两倍每秒几帧。使用interval 17让游戏运动每隔一段时间就卡住一帧。
我怎样才能运行 代码真正以 60fps 的速度获得最大的平滑度?
使用Window.requestAnimationFrame([callback])
这样,无论显示器是 30hz、60hz 还是 120hz 或更高,您的应用程序都会在渲染时被调用。
如果 MDN 文档不够清楚,请参阅 https://css-tricks.com/using-requestanimationframe/ 中的示例了解如何使用它。
var globalID;
function repeatOften() {
$("<div />").appendTo("body");
globalID = requestAnimationFrame(repeatOften);
}
globalID = requestAnimationFrame(repeatOften);
$("#stop").on("click", function() {
cancelAnimationFrame(globalID);
});
$("#start").on("click", function() {
globalID = requestAnimationFrame(repeatOften);
});
div {
width: 10px;
height: 10px;
background: orange;
float: left;
}
button {
position: absolute;
top: 20px;
left: 20px;
}
#stop {
left: 100px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id="start">start</button>
<button id="stop">stop</button>