Javascript,如何加载,绘制和循环120帧
Javascript, how to load, draw and loop 120 frames?
我正在尝试将 120 张图像加载到数组中:
var bgframes = [];
for(i=0; i<119; i++)
{
var frameX = new Image();
if (i>99)
{
frameX.src = 'src/bg/background_00'+i+'.jpg';
bgframes.push(frameX);
}
else if (i>9)
{
frameX.src = 'src/bg/background_000'+i+'.jpg';
bgframes.push(frameX);
}
else
{
frameX.src = 'src/bg/background_0000'+i+'.jpg';
bgframes.push(frameX);
}
}
然后尝试遍历它们,使用以下方法将它们绘制在画布上:
var bgf=0;
setInterval(drawFrame,1000/60);
function drawFrame()
{
if (bgf>119){bgf=0;}
ctx.clearRect(0,0,myCanvas.width,myCanvas.height);
ctx.drawImage(bgframes[bgf],0,0);
bgf++;
}
测试这个,动画将播放一次,然后我会得到:未捕获的类型错误:无法在"CanvasRenderingContext2D"上执行"drawImage":提供的值不是类型"(HTMLImageElement 或 HTMLVideoElement 或 HTMLCanvasElement 或 ImageBitmap)"
您的 for 循环仅填充 119 张图像(0 到 118 ...119不少于119)
但是您的 drawFrame 函数从 0 循环到 119
将 for 循环更改为
for(i=0; i<120; i++)
我还建议更改drawFrame代码,如下所示
function drawFrame() {
ctx.clearRect(0,0,myCanvas.width,myCanvas.height);
ctx.drawImage(bgframes[bgf],0,0);
bgf = (bgf + 1) % bgframes.length; // if bgframes length changes, no need to change the code here as well
}
我也可以建议像这样使用requestAnimationFrame
吗var bgf=0;
function drawFrame() {
ctx.clearRect(0,0,myCanvas.width,myCanvas.height);
ctx.drawImage(bgframes[bgf],0,0);
bgf = (bgf + 1) % bgframes.length;
window.requestAnimationFrame(drawFrame);
}
window.requestAnimationFrame(drawFrame);
无论如何,requestAnimationFrame 通常以 60/秒的速度运行
相关文章:
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 有没有一个javascript图形绘制库可以进行气球树布局
- 使用相同的数据集绘制各种符号
- 使用onclick绘制SVG路径
- 在谷歌地图上绘制位置数据库
- 用chart.js绘制条形图
- “可绘制地图”设置地图选项“纬度-经度”
- 多维数据集网格未在指定的分区中绘制
- 使用谷歌图表在x轴上绘制日期
- 使用fabric.js从矩形区域获取对象,并将该区域绘制到画布上
- 如何在React Native中绘制图形
- 关键帧之间的css3动画延迟
- 画布:逐像素绘制图像并请求动画帧计时
- D3/Raphael js 以慢帧率绘制 1000+ 动画圆圈
- HTML5 动画绘制在上一帧之上
- Javascript,如何加载,绘制和循环120帧
- Safari 9 只在画布上绘制视频的第一帧(错误)
- 衡量iOS每帧可以绘制多少次
- 通过虚拟帧缓冲设备绘制到HTML5 Canvas
- 使用请求动画帧在画布中绘制线条动画