Ich versuche, einen Lichteffekt in einem HTML5 / JavaScript-Spiel mithilfe des Kachelersatzes zu implementieren. Was ich jetzt habe, ist eine Art Arbeit, aber die Übergänge sehen nicht glatt / natürlich genug aus, wenn sich die Lichtquelle bewegt. Hier bin ich jetzt:
- Im Moment habe ich eine Hintergrundkarte, auf die ein PNG-Kachelblatt mit Licht- / Schattenspektrum angewendet wurde - von der dunkelsten Kachel zur vollständig transparenten. Standardmäßig wird die dunkelste Kachel beim Start über das gesamte Level gezogen und deckt alle anderen Ebenen usw. ab.
- Ich verwende meine vorgegebenen Kachelgrößen (40 x 40 Pixel), um die Position jeder Kachel zu berechnen und ihre x- und y-Koordinaten in einem Array zu speichern.
- Ich spawne dann an jeder Position im Array eine transparente 40 x 40 Pixel große "Gitterblock" -Entität
- Mit der von mir verwendeten Engine (ImpactJS) kann ich dann die Entfernung von meiner Lichtquellenentität zu jeder Instanz dieser Gitterblockentität berechnen.
- Ich kann dann die Kachel unter jeder dieser Gitterblockkacheln durch eine Kachel mit der entsprechenden Transparenz ersetzen.
Derzeit führe ich die Berechnung wie folgt in jeder Instanz der Rasterblockentität durch, die auf der Karte erzeugt wird:
var dist = this.distanceTo( ig.game.player );
var percentage = 100 * dist / 960;
if (percentage < 2) {
// Spawns tile 64 of the shadow spectrum tilesheet at the specified position
ig.game.backgroundMaps[2].setTile( this.pos.x, this.pos.y, 64 );
}
else if (percentage < 4) {
ig.game.backgroundMaps[2].setTile( this.pos.x, this.pos.y, 63 );
}
else if (percentage < 6) {
ig.game.backgroundMaps[2].setTile( this.pos.x, this.pos.y, 62 );
}
// etc...
Das Problem ist, dass, wie gesagt, diese Art der Berechnung die Lichtquelle nicht sehr natürlich aussehen lässt. Das Wechseln von Kacheln sieht zu scharf aus, während sie im Idealfall mithilfe des Spektrum-Kachelblatts reibungslos ein- und ausgeblendet werden (ich habe das Kachelblatt aus einem anderen Spiel kopiert, das dies schafft, daher weiß ich, dass es kein Problem mit den Kachelschattierungen ist. Ich bin mir nur nicht sicher wie das andere Spiel es macht). Ich denke, dass meine Methode, Prozentsätze zum Austauschen von Kacheln zu verwenden, möglicherweise durch ein besseres / dynamischeres Proximity-Forum ersetzt werden könnte, das reibungslosere Übergänge ermöglicht. Könnte jemand Ideen haben, was ich tun kann, um die Grafik hier zu verbessern, oder eine bessere Methode, um die Nähe zu den Informationen zu berechnen, die ich über jede Kachel sammle?
(PS: Ich reposte dies von Stack Overflow auf Vorschlag von jemandem, entschuldige das Duplikat!)