Tilesets packen

Mit Tilesets ist immer ein Problem: Im Editor will man sie gut geordnet und nimmt auch gerne mal ein paar doppelte Tiles oder leere Flächen in Kauf. Wenn man jetzt aber eine Karte fertig hat, hätte man lieber eine möglichst kleine Texture. So hat meine „Arbeitstexture“ über 5.100 Tiles, aber nur ca. 3.000 unterschiedliche. Hier kommt mein Programm ins Spiel:

Das Programm liest eine Texture ein und schneitet sie in 32×32 Pixel große Teile. Für jeden Teil wird ein Hash gebildet, dadurch können identische (oder fast identische) Teile verworfen werden. Diese Teile werden wieder zusammengesetzt und es wird eine Datei ausgegeben, die die Zuordnung der alten und neuen ID´s enthält. Mit dieser Datei kann das Programm das eine Datei behandeln und die ID´s austauschen.

Weiterlesen

100 FPS mehr durch Tilemap Clipping

Da ich momentan noch auf Bug-Jagd durch die Tiefen von The Kingdom of Darkness bin, habe ich heute mal zu Abwechslung das Tilemap Clipping eingebaut. Durch diese Technik werden einfach nicht alle Tiles gezeichnet, sondern nur die, die auch grade auf dem Bildschirm zu sehen sind.

Der Performancegewinn hängt von der Größe der Karte ab, bei mir hat es 100 FPS gebracht. Das ist weniger als es erstmal klingt, den ob ein Spiel nun mit  300 oder 400 Frames pro Sekunde läuft kann man nicht merken… Trotzdem hatte ich schon lange vor diese Technik einzubauen. Die Änerung ist eigentlich auch nur sehr klein:

for (int i = (int)Camera.CameraPosition.X / 32; i < Math.Min(((int)Camera.CameraPosition.X / 32) + 26, Tiles.Count); i++)
 {
 // Alle Spalten durchlaufen
 for (int j = (int)Camera.CameraPosition.Y / 32; j < Math.Min(((int)Camera.CameraPosition.Y / 32) + 20, Tiles[0].Count); j++)
 {

Weiterlesen