【发布时间】:2016-03-24 13:29:35
【问题描述】:
我使用 getImageData 和 putImageData 从缓冲区画布在画布上绘图。我使用这些方法是因为我有大量的粒子,并且这些被证明可以提供最佳性能。 现在我想添加粒子的旋转,但我遇到了问题。 这是一个使用变换矩阵进行旋转的jsfiddle。正如您在图片(或小提琴)中看到的那样,生成的图像中有一些洞,我有点期望使用这个矩阵。
nx = ~~ (xx * Math.cos(angle) + yy * Math.sin(angle) + cx);
ny = ~~ (xx * Math.sin(angle) - yy * Math.cos(angle) + cy);
但我不知道如何使它变得更好,尤其是当我正在寻找性能高效的解决方案时?
jsfiddle demo
图像 - 旋转后的正方形(正方形用作简单的主体):
目前我的备份是程序生成的精灵动画,它是预先准备好的标准画布状态:保存 -> 翻译 -> 旋转 -> 恢复。
非常感谢您给我的任何指示。
【问题讨论】:
-
我正在快速检查旧项目,但现在我不确定我是如何处理它的。我知道我确实做出了一些妥协,并在其他领域提升了性能。我认为我使用的其中一件事是将每个新的程序创建的图像预渲染到它自己的画布中,并使用标准的画布旋转功能来获取该特定对象的动画所需的所有帧。基本上,我尽可能提前准备好精灵,同时确保我摧毁其他无法重新利用的精灵。
-
没关系,我得到了中间的白色/空白像素,不知道该怎么办,我无法解决并从我的画布游戏中移除旋转。
-
好吧,我建议你简单地使用画布旋转。它非常有效,如果您使用硬件加速,除非您进入大量的精灵,否则您根本不会感觉到它。不过,我会首先检查您是否可以使用一个大画布并保存 - 反式 - 腐烂 - 休息例程或仅针对每个精灵使用几个较小的画布来获得更好的结果 - 或者至少为不同大小的图像设置几个单独的画布 -并使用相同的程序将它们旋转到那里,然后从这些画布中绘制到您的主要画布中(我认为每张图像的画布会产生更快的结果)。
标签: javascript canvas image-rotation