Javascript 如何将HTML5画布存储为帧列表中的图像?

Javascript 如何将HTML5画布存储为帧列表中的图像?,javascript,html,canvas,Javascript,Html,Canvas,尝试为HTML5游戏制作一个简单的动画引擎。我在顶部有一个由帧预览和线框编辑器组成的时间线,线框编辑器带有一个粘贴工,用于在更大的底部画布上进行测试 var framePreviews = [undefined,undefined,undefined....]; var c = document.getElementById('bottomCanvas'); var tContext = document.getElementById('timelineCanvas').getContext('

尝试为HTML5游戏制作一个简单的动画引擎。我在顶部有一个由帧预览和线框编辑器组成的时间线,线框编辑器带有一个粘贴工,用于在更大的底部画布上进行测试

var framePreviews = [undefined,undefined,undefined....];
var c = document.getElementById('bottomCanvas');
var tContext = document.getElementById('timelineCanvas').getContext('2d');
framePreviews[simulation.currentFrame] = c; // save canvas in an array
tContext.drawImage(framePreviews[simulation.currentFrame], simulation.currentFrame*60, 0, 60, 60/c.width*c.height); // draw the canvas 60px wide in the timeline
切换帧时,我使用drawImage()将底部画布复制到顶部的小帧预览

是否有办法将底部画布的当前状态保存在数组中(每个项目对应于每个帧),以便我可以使用drawImage()将它们作为洋葱皮放置

如果您想直观地看到该项目,请看以下内容:

(如果你看一看这个项目,它还没有真正起作用,这是一项正在进行的重大工作,而且非常容易出错)

这就是我一直在尝试的,它适用于预览,但不会在底部画布上重新绘制为洋葱皮

var framePreviews = [undefined,undefined,undefined....];
var c = document.getElementById('bottomCanvas');
var tContext = document.getElementById('timelineCanvas').getContext('2d');
framePreviews[simulation.currentFrame] = c; // save canvas in an array
tContext.drawImage(framePreviews[simulation.currentFrame], simulation.currentFrame*60, 0, 60, 60/c.width*c.height); // draw the canvas 60px wide in the timeline
不要。 一幅图像真的很重,不管你选择什么样的保存方法,总有至少一次需要存储在浏览器内存中的全尺寸画布的ImageBitmap,几帧后,你就会把它吹出来

你不需要在你的应用程序中进行任何繁重的计算,所以你不需要将它们存储为图像

相反,只保存绘图命令,并每次重做绘图。


现在,对于那些需要保存计算量大的帧的人来说,最好是从画布中删除,但是再次强调,只有在绘制这一帧所需时间超过16毫秒时,才应该使用此选项。

不要这样做。 一幅图像真的很重,不管你选择什么样的保存方法,总有至少一次需要存储在浏览器内存中的全尺寸画布的ImageBitmap,几帧后,你就会把它吹出来

你不需要在你的应用程序中进行任何繁重的计算,所以你不需要将它们存储为图像

相反,只保存绘图命令,并每次重做绘图。



现在,对于那些必须保存计算量大的帧的人,最好是从画布中删除,但再一次,仅当绘制这一帧所需时间超过16毫秒时,才应使用此选项。

小建议您可以尝试使用此选项管理和共享项目检查代码后,您可以为帧创建图像,并使用此处介绍的技术将其保留在画布外。小建议您可以尝试使用此选项管理和共享项目项目检查代码后,您可以为框架创建图像,并使用此处介绍的技术将其保留在画布之外。谢谢。有没有办法用Javascript保存绘图命令,或者我需要创建一个点、线、线宽等的列表来进行迭代?是的,保存所有点位置,以及您将添加的任何其他功能(可能是颜色、线宽等)并将它们保存在一个通用格式中,在绘制每个帧时,您只需迭代即可。谢谢。有没有办法用Javascript保存绘图命令,或者我需要创建一个点、线、线宽等的列表来进行迭代?是的,保存所有点的位置,以及您将添加的任何其他功能(可能是颜色、线宽等),并将其保存为通用格式,在绘制每个帧时,您只需迭代即可。