为了找出需要输出的行数和列数,您应该检查窗口的宽度和高度并相应地进行更改。记住要听onResize事件并相应地修改宽度和高度。
如果要以文本方式执行此操作,则可以使用具有等宽字体的文本和一个表格(其中每个单元格包含一个字符)来执行此操作。
要解决单个字符,您可以创建<table>
具有正确数量的行和列的,其中每个<td>
都有一个由x和y坐标组成的ID。这样,您可以按ID寻址单个单元格,并更改其innerHTML以更改字母,并更改其CSS类以更改其颜色。
但是,使用画布可能会更快,因为您不必为每个要替换的字符操纵大型DOM树。顺便说一句,矮人要塞也在做类似的事情。用于表示对象的字符实际上是位图,而不是真实的文本输出,它们是使用2d图形API绘制的。HTML5画布对此功能齐全。它具有context.fillText方法,可让您在画布上绘制文本。这可以用来绘制单个字符。您可以通过操纵变量的变化大小和字型context.font和每个字母的调用颜色context.fillStyle。
请注意,每帧调用fillText数百次可能会很慢,因为光栅化字体非常昂贵,而且我所知没有浏览器使用缓存。这意味着当您用相同的设置渲染同一字母一百次时,它将被重新光栅化一百次。为了提高性能,您可以将每个字母的光栅化外观与每种颜色一起缓存在隐藏的画布上,然后使用context.drawImage绘制这些隐藏的画布。从一个画布复制到另一画布通常比字体光栅化要快得多。
我目前正在使用画布开发2D游戏,并且注意到最大的FPS使用者是字体绘图。当我添加栅格化文本的缓存时,它大大提高了性能。