Um herauszufinden, wie viele Zeilen und Spalten Sie ausgeben müssen, sollten Sie die Fensterbreite und -höhe überprüfen und entsprechend ändern. Denken Sie daran, onResize-Ereignisse anzuhören und die Breite und Höhe entsprechend zu ändern.
Wenn Sie dies auf textuelle Weise tun möchten , können Sie Text mit einer monospaced Schriftart und einer Tabelle verwenden, in der jede Zelle ein Zeichen enthält.
Um einzelne Zeichen zu adressieren, können Sie eine <table>
mit der richtigen Anzahl von Zeilen und Spalten erstellen , wobei jede <td>
eine ID hat, die aus ihren x- und y-Koordinaten besteht. Auf diese Weise können Sie einzelne Zellen anhand ihrer ID adressieren und ihre innerHTML ändern, um den Buchstaben zu ändern, und ihre CSS-Klasse ändern, um ihre Farbe zu ändern.
Die Verwendung einer Zeichenfläche kann jedoch schneller sein, da Sie nicht für jedes zu ersetzende Zeichen einen großen DOM-Baum bearbeiten müssen. Die Zwergenfestung macht übrigens etwas Ähnliches. Die Zeichen, die zur Darstellung von Objekten verwendet werden, sind Bitmaps und keine echte Textausgabe. Sie werden mithilfe von 2D-Grafik-APIs gezeichnet. Die HTML5-Zeichenfläche ist dafür gut ausgestattet. Es verfügt über die context.fillText- Methode, mit der Sie Text auf die Zeichenfläche zeichnen können. Dies kann verwendet werden, um einzelne Zeichen zu zeichnen. Sie können die Größe und Schriftart ändern, indem Sie die Variablen context.font und die Farbe jedes Buchstabens bearbeiten, indem Sie context.fillStyle aufrufen .
Beachten Sie, dass das hunderte Mal das Aufrufen von fillText pro Frame langsam sein kann, da das Rastern von Schriftarten teuer ist und kein mir bekannter Browser das Caching verwendet. Das heißt, wenn Sie denselben Buchstaben hundertmal mit denselben Einstellungen rendern, wird er hundertmal neu gerastert. Um die Leistung zu steigern, können Sie das gerasterte Erscheinungsbild jedes Buchstabens mit jeder Farbe auf einer versteckten Leinwand zwischenspeichern und diese versteckten Leinwände dann mit context.drawImage zeichnen . Das Kopieren von einer Leinwand auf eine andere ist normalerweise viel schneller als das Rastern von Schriftarten.
Ich entwickle derzeit ein 2D-Spiel mit Leinwand und habe festgestellt, dass der größte FPS-Esser die Schriftzeichnung war. Als ich einen Cache für gerasterten Text hinzufügte, verbesserte sich die Leistung erheblich.