【发布时间】:2012-04-21 07:56:35
【问题描述】:
我正在使用画布实现一个 HTML5 游戏。现在我正在考虑使用在画布上具有绝对位置的 HTML 元素来制作所有文本覆盖,如工具提示、语音气泡、信息窗口等。所以我可以使用 CSS3 提供的许多效果和过渡。
但我不确定性能。这些覆盖层必须经常添加和删除(就像 MMORPG 一样,所以会有很多气泡等等)。
可能有两个关于性能的问题:
DOM 遍历以添加/删除。也许缓存可以提供帮助?
HTML 和 CSS3 本身。
另一种选择是在画布本身中管理这些元素,在每一帧中绘制它们。但也许我又一次受到了性能损失,因为我必须添加额外的代码、超时和其他东西,才能实现与 CSS3 中类似的效果。并且无论如何都需要遍历一些数据结构。
有什么建议、意见、经验吗?
提前致谢。
【问题讨论】:
-
DOM 遍历时间可以通过缓存对“重要”元素的引用来减少;为此,我经常保留 someUniqueId => DOMElement 的哈希值。 id 可以存储为元素上的 data-* 属性以帮助实现此方案。至于将 CSS3 与 Canvas 混合,我自己一直在想这个策略(+1)。必须很好地抽象转换(画布坐标 -> 屏幕坐标),否则您最终会陷入混乱,试图找出在画布顶部放置常规元素的位置。