javascript - 使用 requestAnimationFrame 控制动画速度
问题描述
我正在尝试为从左到右在画布上移动的正方形设置动画。我正在使用 requestAnimationFrame 这样做。不幸的是,我无法控制广场的速度。
我当前的代码如下所示:
// Functions
// ===========================
// Square -> Square
// start the world with initial state s, e.g main(0)
function main(s) {
requestAnimationFrame(main);
advanceSquare(s);
renderSquare(s);
}
// =========
// Square -> Square
// move square to the right
function advanceSquare(s) {
s++;
}
// =========
// Square -> Image
// render the square on screen
// (check-expect)
function renderSquare(s) {
renderScreen(screenWidth, screenHeight);
ctx.fillStyle = squareColour;
ctx.fillRect(s, squareYCoord, squareSides, squareSides);
}
// =========
// Number Number -> Image
// render the screen
function renderScreen(screenWidth, screenHeight) {
ctx.fillStyle = screenColour;
ctx.fillRect(0, 0, screenWidth, screenHeight);
}
s
表示正方形的 x 坐标。advanceSquare(s)
增加s
1。但是,当我更改advanceSquare(s)
为:
function advanceSquare(s) {
return s + 0.1;
}
速度保持不变。
你能建议一种降低广场速度的方法吗?
谢谢!
解决方案
我发现我的代码存在问题,并且存在 2 个问题。
首先,回调方法requestAnimationFrame
传递了一个参数 a DOMHighResTimeStamp
,它指示当前时间(基于从时间开始的毫秒数)。这意味着我们不能s
传入main()
. 因此代码应该是:
function main() {
requestAnimationFrame(main);
advanceSquare(s);
renderSquare(s);
}
第二个问题是没有获取fromrenderSquare(s)
的更新值。为了做到这一点,我必须写:s
advanceSquare(s)
function main() {
requestAnimationFrame(main);
renderSquare(advanceSquare(s));
}
推荐阅读
- python-3.x - 问题链接上的 Jira Python Keyerror
- image - 如何在 CLI 中按图像大小顺序列出 Google Container Registry 中已发布的容器图像
- angular - 使用不同的 client_id 多次调用 gapi.auth2.init
- ios - 触摸事件不会在部分扩展到父 UIView 之外的子 UIView 之外注册
- laravel - 如何通过匹配键及其值来组合两个集合
- angular - 使用 Angular Elements 构建微前端
- java - 在 Spring Boot 中将 JSON 文件作为 JSONArray 返回
- php - 如何通过php中的正则表达式查找PDO查询中的参数?
- java - Java Vigenere 密码
- javascript - 现有示例中 Mapbox gl 上的过滤器