如何解决HTML5 Canvas 通过 Translate 与 Clipping 平移图像的效率
有很多关于在画布中平移背景图像的问题(即模拟游戏中角色位于中心的“相机”) - 大多数答案都建议使用画布的 translate
方法。
但既然你必须在每一帧中重新绘制图像,为什么不直接剪辑呢?它在效率方面重要吗?
特别是,像这样平移是个坏主意吗? (这个例子展示了一个简化的相机向一个方向移动的平移)
let drawing = new Image();
drawing.src = "img_src";
drawing.onload = function () {
ctx.drawImage(drawing,0);
let pos = 0
setInterval(() => {
pos += 1
ctx.clearRect(0,cnvs.width,cnvs.height);
ctx.drawImage(drawing,-pos,0 ); // "pans" the image to the left using the option `drawImage` parameters `sx` and `sy`
},33);
};
示例结果:fiddle
提前致谢!
解决方法
使用变换矩阵来控制相机的主要优点是您不必更新世界中的所有元素,而只需移动世界即可。
所以,是的,如果您只想移动一个元素(比如您的情况下的背景),那么只移动一个元素可能是更好的选择。
但是如果你需要多层元素都相对于相机移动,那么使用变换矩阵是更好的选择。
至于性能,我没有对此进行任何基准测试,但我怀疑它是完全相同的,尽管在弄乱 ~>
的裁剪功能时要小心,至少 Safari doesn't handle cropping from outside of a source canvas correctly .
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。