【问题标题】:Pre-Rendering an animation on a canvas in javascript用javascript在画布上预渲染动画
【发布时间】:2012-08-14 16:18:24
【问题描述】:

我有一个网络应用程序,它使用画布为绘制到屏幕上的树设置动画。它通过连续进行多次三角计算来实现。当您单击“成长”按钮时,会出现一个树木生长的动画,该动画具有用户可以更改的某些属性。您可以在此处查看应用程序http://pastehtml.com/view/c85mxfgcj.html

问题是,如果您将“年龄”(要通过的迭代次数)设置得太高,由于计算机必须执行的计算,动画开始滞后。我想知道两件事:

  1. 有没有办法在动画显示给用户之前对其进行预渲染?
  2. 有没有一种方法可以做到,如果我有一棵已经渲染过的树,并且我想让它在屏幕上移动,我可以做到这一点,而不必在每一帧都重新绘制树?李>

谢谢。

【问题讨论】:

  • 欢迎来到*!你能用一组画布吗?
  • 嗨 - 我相信你会在这里找到一些有用的建议:Does HTML5/Canvas Support Double Buffering?
  • 我是否必须制作两个以上的画布才能容纳每一帧?我希望每个单独的帧都被预加载,如果我只使用两个,那么这基本上就是在做计算机已经为你做的事情。它一直等到下一帧被加载,然后显示图像,这似乎是双缓冲的作用。如果我确实必须创建多个画布,那么这也会产生问题,因为我不知道当客户端也按下“增长”时我需要多少帧,我听说双缓冲实际上会导致更多的性能开销。

标签: javascript html animation canvas rendering


【解决方案1】:

1:您可能想查看var fragment = document.createDocumentFragment();
2:是的,通过css,速度更快!

我认为this youtube video 值得您花时间。

祝你好运

更新:2013 年 1 月 9 日 只是偶然发现了这个。
在 css3 中有一个使用步骤的动画功能。
基本上,您创建一个精灵(在画布中),然后使用 css3 使用元素上的背景属性为精灵设置动画。非常酷(并且应该使用优化的浏览器自己的代码来执行此操作,因此不会像使用 javascript/canvas 那样加载用户 cpu)。
但是它仍然没有创建动画 gif(但我认为即使使用库也应该是可能的,因为 gif 和 pnp 非常相似,然后使用 data:image/gif 协议提供该 gif),但最终结果仍然看起来在(现代)浏览器中也是如此。

HTML: <div class="hi"></div><img src="transparent.gif" class="hi">

CSS3:

.你好{ 宽度:50px; 高度:72px; 背景图片: url("http://files.simurai.com/misc/sprite.png");

-webkit-animation: play 1s steps(10) infinite;
   -moz-animation: play 1s steps(10) infinite;
    -ms-animation: play 1s steps(10) infinite;
     -o-animation: play 1s steps(10) infinite;
        animation: play 1s steps(10) infinite; }

@-webkit-keyframes 播放 { from { background-position: 0px; } 到{背景位置:-500px; } }

@-moz-keyframes 播放 { from { background-position: 0px; } 到{背景位置:-500px; } }

@-ms-keyframes 播放 { from { background-position: 0px; } 到{背景位置:-500px; } }

@-o-keyframes 播放 { from { background-position: 0px; } 到{背景位置:-500px; } }

@keyframes 播放 { from { background-position: 0px; } 到{背景位置:-500px; } }

例如jsfiddle

【讨论】:

  • 这似乎是我正在寻找的答案!那个youtube视频也很酷!谢谢!你介意给我一个如何使用它的例子吗?
  • pieuw..每个人都还在发现..有很多方法,但是对于移动对象我绝对推荐css(也可以缩放甚至旋转!!!)。
  • 你想要 gpu 加速的 3D 变换——否则在移动设备上会很慢。
  • @FlavorScape:你能详细说明一下吗?或者提供参考链接?谢谢!