我正在使用一些 HTML 5 功能制作一个小俄罗斯方块克隆,我遇到了一些困境。
我的 tetrominos 不是由块组成的——它们有依赖于旋转的阴影和阴影,因此每个都是它自己的图像。这意味着每次游戏状态发生变化时我都不能使用正常的“重绘所有内容”,因为这意味着要跟踪所有的棋子掉落历史并在我想清除一条线时“重播”它。
所以我的选择是:
1) 创建两个相互堆叠的画布元素。背面的那个是“板”图像。最上面的一个是作品画布,我可以在其中轻松地切割和重新排列东西。不过,这感觉很骇人听闻,因为我想将所有内容都保存在一个画布元素中。
2)创建一个“绘图”上下文和一个“缓冲区”上下文。在缓冲区上下文中,我拥有所有的片段并且可以自由地操作它,当需要将缓冲区绘制到屏幕上时,我获取ImageData,循环遍历所有像素,并将它们合成到板图像上。然后我使用 putImageData 将其写入“绘图”上下文。之所以会出现这种麻烦,是因为我找不到一种方法来获取 ImageData 结构并将其合成到画布元素上(您可以通过使用 drawImage 的 ImageElements 来做到这一点,但 drawImage 不会采用 ImageData 结构)。
这两种解决方案对我来说似乎都很优雅。
谢谢