javascript - 在 JS 中拆分 Sprite Sheets/Chip Sets 的高性能方法是什么?

标签 javascript html css sprite chipset

我正在为 html/js 开发 2d 世界编辑器,并试图找到将芯片组(如下所示)拆分为多个小方 block (芯片)的最佳方法。

目前,我正在使用一种类似于默认的 css Sprite 表方法的方法,即使用背景位置来移动许多小的背景 <div>元素,直到每个元素显示筹码组的一个方格/筹码。

它工作正常,没有大的性能问题,但它似乎是一种整体笨拙的方法。

我想到的其他方法是将芯片组切成许多临时图像并制作一个 <image>每个元素,或使用 <canvas>而不是 <div>'s<image>'s

无论如何,我正在寻找有关该主题的建议:

在 JS 中拆分 Sprite Sheets/Chip Sets 的高性能方法是什么?

example chip set

芯片组示例

最佳答案

您现在执行此操作的方式应该非常快。您基本上可以通过仅存储一个图像然后使用 drawImage 在 Canvas 级别重新实现它。只从中绘制部分。据我所知,这是最常见的方式,而且速度非常快。至少那是我写 game engine using canvas. 时的经历

使用 Canvas 很可能更快,内存效率更高,因为您没有额外的 DOM 开销,但您必须针对您的特定用例对其进行测量并进行验证。

如您所建议的,创建一堆单独的图像会非常慢,因为它需要复制图像的一部分并为每个图像创建一个额外的 DOM 元素。

简而言之:使用 Canvas 总是会更快(对于类似的实现),因为您几乎是直接与 GPU 交互。从一张图像中绘制而不是将其复制到多个子图像中总是会更快,因为你不会有重复的内存,只要你从同一张纸上绘制,GPU 就不必切换纹理.

关于javascript - 在 JS 中拆分 Sprite Sheets/Chip Sets 的高性能方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44768360/

相关文章:

javascript - 我创建了一个可以对数字进行因式分解的网页。我已经创建了该功能。现在我需要创建一个函数来显示我的数学。

javascript - 如何设置具有相同ID的多个div相对于它们在DOM中的位置的边距高度

html - 在 React 的 onFocus 期间区分键盘和鼠标事件

javascript - 将鼠标悬停在上面

html - 阻止 html 在代码块内呈现

javascript - 如何在javascript函数中获取Table的所有td值

javascript - 当页面/浏览器失去焦点时暂停 setInterval

javascript - CSS Z-Index : How to show element above parent's sibling?(并且在父级之上有表亲)

html - 在单个网页上的iframe中单击即可播放youtube视频

html - 将元素定位在 div 底部