javascript - 我如何计算自上次渲染以来的秒数?
问题描述
我正在尝试用 Javascript 和这个数学制作蛇游戏 *if(secondsSinceLastRender < 1 / SNAKE_SPEED) return
- 我有点困惑,我真的不明白它的作用......谁能解释我?太感谢了!
这是我的 js,它实际上在哪里:
let lastRenderTime = 0
const SNAKE_SPEED = 2
function main(currentTime) {
const secondsSinceLastRender = (currentTime - lastRenderTime) / 1000
window.requestAnimationFrame(main)
if(secondsSinceLastRender < 1 / SNAKE_SPEED) return
lastRenderTime = currentTime
console.log(secondsSinceLastRender)
}
window.requestAnimationFrame(main)
这是我的 html 和 css:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Snake</title>
<style>
body {
height: 100vh;
width: 100vw;
display: flex;
justify-content: center;
align-items: center;
margin: 0;
background-color: black;
}
#game-board {
background-color: #CCC;
width: 100vmin;
height: 100vmin;
display: grid;
grid-template-rows: repeat(21, 1fr);
grid-template-columns: repeat(21, 1fr);
}
#snake {
background-color: hsl(200, 100%, 50%);
border: .25vmin solid black;
}
#food {
background-color: hsl(50, 100%, 50%);
border: .25vmin solid black;
}
</style>
</head>
<body>
<div id="game-board"></div>
<script src="game.js" type="module"></script>
</body>
</html>
解决方案
我们试试看。下面的行只是找到最后一次运行的内容。(currentTime - lastRenderTime),结果以毫秒为单位,因此除以 1000 以将其转换为秒。
const secondsSinceLastRender = (currentTime - lastRenderTime) / 1000
我们有一个变量SNAKE_SPEED,这只是为了控制蛇的速度,以便我们可以更新lastRenderTime。例如,我添加了额外的日志。通常,window.requestAnimationFrame每秒会触发近 60 次。但是,我们不希望我们的逻辑(在这种情况下蛇逻辑每秒被触发 60 次)。我们正试图通过1 / SNAKE_SPEED来控制它。在这种情况下,当secondsSinceLastRender > .5的值时,我们将执行我们的逻辑。请参阅控制台日志中的屏幕截图,其中第 28 次它不会返回。
let lastRenderTime = 0
const SNAKE_SPEED = 2
function main(currentTime) {
const secondsSinceLastRender = (currentTime - lastRenderTime) / 1000
window.requestAnimationFrame(main)
if(secondsSinceLastRender < 1 / SNAKE_SPEED){
console.log("Time did not update");
return;
}
else
console.log("Time would be updated");
lastRenderTime = currentTime
console.log(secondsSinceLastRender)
}
window.requestAnimationFrame(main)
希望这可以清除数学:)
推荐阅读
- php - PHP 目录问题,无法使用 (../) 返回目录
- sql - 与直接函数调用相比,为什么 CROSS APPLY with Functions 这么慢?
- javascript - 如何检查对象是否已经在 three.js 场景中然后替换它?
- assembly - 汇编(AT&T 格式)操作数值
- c++ - std::vector 移动而不是交换到空向量并释放存储空间
- java - 二维数组打印第一个负数和每行最后一个之间的元素总和
- android - 如何使用 google 签名按钮确定我是否已登录或注册我的 android 应用程序
- sas - SAS 等价于 rleid 函数
- c# - Linq SelectMany 基于两个属性
- javascript - Elm,模型如何与订阅保持同步?