1

我正在使用一些 HTML 5 功能制作一个小俄罗斯方块克隆,我遇到了一些困境。

我的 tetrominos 不是由块组成的——它们有依赖于旋转的阴影和阴影,因此每个都是它自己的图像。这意味着每次游戏状态发生变化时我都不能使用正常的“重绘所有内容”,因为这意味着要跟踪所有的棋子掉落历史并在我想清除一条线时“重播”它。

所以我的选择是:

1) 创建两个相互堆叠的画布元素。背面的那个是“板”图像。最上面的一个是作品画布,我可以在其中轻松地切割和重新排列东西。不过,这感觉很骇人听闻,因为我想将所有内容都保存在一个画布元素中。

2)创建一个“绘图”上下文和一个“缓冲区”上下文。在缓冲区上下文中,我拥有所有的片段并且可以自由地操作它,当需要将缓冲区绘制到屏幕上时,我获取ImageData,循环遍历所有像素,并将它们合成到板图像上。然后我使用 putImageData 将其写入“绘图”上下文。之所以会出现这种麻烦,是因为我找不到一种方法来获取 ImageData 结构并将其合成到画布元素上(您可以通过使用 drawImage 的 ImageElements 来做到这一点,但 drawImage 不会采用 ImageData 结构)。

这两种解决方案对我来说似乎都很优雅。

谢谢

4

1 回答 1

1

分层画布并没有什么“hackish”。

从旧的投币式游戏机到现代 GPU,通过 80 年代的 8 位家用计算机,在许多系统中都在多个级别上执行了类似的策略,更不用说经典的手绘卡通(它们是在透明的醋酸纤维上绘制以使用类似的技术)。

事实上,即使您进行其他类型的操作,您也很有可能出于多种原因进行分层。

于 2011-10-21T03:06:28.090 回答