【发布时间】:2020-02-25 22:34:14
【问题描述】:
我编写了非常简单的游戏教程,这些教程使用了一个简单的 requestAnimationFrame 游戏循环。他们不需要跟踪经过的时间或帧速率:
var canvas = document.querySelector("#canvas");
var ctx = canvas.getContext("2d");
function gameLoop() {
ctx.clearRect(0,0,canvas.width,canvas.height);
//Drawing, etc.
var myRAF = requestAnimationFrame(gameLoop);
}
gameLoop();
现在我想学习如何从 spritesheet 为诸如步行循环之类的东西制作动画,而不仅仅是为静态对象的运动制作动画。我相信这需要首先学习如何跟踪一帧渲染所花费的时间,或者你在哪一帧上。我的印象是,如果您使用 RAF 而不是 setInterval 或 setTimeout(哎呀!),则没有必要这样做。我见过人们使用 Date 对象、requestAnimationFrame Timestamp 和 performance.now,尽管我还不了解代码。如果我的目标是从 spritesheets 制作动画,并确保无论任何特定玩家达到多少 fps,游戏中的移动速度都相同,那么使用 requestAnimationFrame 进行游戏开发的最佳选择是哪一个?我读过你必须将游戏中的所有速度乘以时间因子,但不知道如何。否则,只有 30 fps 的慢速计算机在游戏中行走并以一半的速度射击子弹,而快速机器的速度约为 60 fps,对吧?
请告诉我如何在游戏循环中实现时间/帧跟踪代码,以及实现此目的的不同方法的优缺点。
可能听起来我想要一个教程,请忽略原始问题中的以下部分
也很高兴看到您将如何使用该代码为精灵表中的行走或拍动翅膀等动画制作动画,以及如何将运动速度乘以时间因子,以便每个人都能获得相同的游戏体验。
【问题讨论】:
-
@gman 至少链接一个教程,该教程教授我所询问的时间/框架部分。我会更新我的问题。
标签: javascript html animation canvas sprite-sheet