Während die von sws und MarkR beschriebene Methode auch das ist, was ich bevorzuge, möchte ich einen alternativen Ansatz vorstellen.
Eine hackige Option zum Erstellen eines isometrischen Looks mit minimalem Aufwand besteht darin, tatsächlich orthogonale Kacheln zu verwenden und mit context.transform eine Projektionsmatrix festzulegen, mit der die Karte isometrisch aussieht (oder eine Kombination aus context.rotate und context.scale, wenn Sie dies nicht tun). Ich weiß nicht, wie Projektionsmatrizen funktionieren.
Siehe die Spezifikation für Canvas-Transformationsmethoden Informationen finden .
Fliesenbild:
Zeichnungscode:
for (var x = 0; x < 5; x++) {
for (var y = 0; y < 5; y++) {
ctx.drawImage(img, x * img.width, y * img.height);
}
}
Ergebnis vor Matrixanwendung:
Gleicher Code mit demselben Kachelbild nach Anwendung dieser Transformationsmatrix:
ctx.transform( 1, 0.5,
-1, 0.5,
160, 0 );
Mit dem gestrichelter Raster aus dem Kachelbild entfernt und die Fliese in der Zeichnung Code - Offset geändert img.width - 1
und img.height - 1
auf den Lücken durch die Transformation verursacht loszuwerden. Plötzlich sieht die Fliese halb so hässlich aus:
Der Hauptnachteil dieser Methode besteht darin, dass Ihre Kacheln beim Entwerfen in einem Grafikeditor nicht wirklich das sind, was Sie sehen, was Sie bekommen. Sie werden auch auf Probleme stoßen, wenn Sie Objekte zeichnen möchten, die nicht auf dem Boden liegen, sondern aufrecht stehen. Für diese können Sie die Transformationsmatrix ausschalten, bevor Sie sie zeichnen, aber dann müssen Sie die Position selbst berechnen. Sie können diese Formeln dafür verwenden:
var xScreen = xWorld * 1 + yWorld * -1 + 160;
var yScreen = xWorld * 0.5 + yWorld * 0.5 + 0;
(Beachten Sie, wie die Zahlen aus der Transformationsmatrix in diesen Formeln wieder angezeigt werden - Sie führen die Matrixmultiplikation hier selbst durch).
Warum sollte ich das tun?
Diese Methode ist gut, wenn Sie:
- Sie haben keine Erfahrung mit dem Entwerfen von isometrischen Kacheln, aber Sie haben orthogonale
- Ich möchte nicht viel Zeit mit der Entwicklung einer isometrischen Grafik-Engine verbringen, die etwas schwieriger ist als eine orthogonale.
Ein weiteres interessantes Feature ist, dass Sie, wenn Sie sich mit Matrixberechnung auskennen, die Projektionsmatrix zwischen Frames ändern können, um die Karte in Echtzeit zu zoomen, zu neigen und zu drehen, um einige schöne Fake-3D-Effekte zu erzielen (versuchen Sie, dies mit isometrischen Kacheln zu tun). .
Aber wenn Sie wissen, wie man mit isometrischen Fliesen sowohl künstlerisch als auch technisch umgeht, und Sie keine Tricks mit falschen Perspektiven benötigen, würde ich Ihnen eher empfehlen, rautenförmige Fliesen mit Transparenz zu verwenden.