Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

26.11.2015, 15:50

Untergrund generierung in 2d-isometrischem Spiel [SFML 2.1, C++]

Hallo Forum,

ich arbeite momentan an einem Strategiespiel in 2d-Isometrischer Ansicht.
Der Untergrund/Boden des Spiels besteht aus einer Vielzahl von Rauten. Um schöne Übergänge zwischen den unterschiedlichen Landschaftstypen hinzubekommen, werden über die „Basisrauten“ eines Untergrunds (Gras, Sand, Dreck, etc…) unterschiedliche Übergänge in max. 4 Ebenen gelegt (wenn sich an einer Stelle 4 unterschiedliche Untergründe treffen…).
Um den Render-Aufwand im Spiel so gering wie möglich zu halten, werden jeweils 5x5 Rauten mit den jeweiligen Übergängen auf eine größere Raute kopiert (mittels SFML 2.1 image -> copy).
Einmal initialisiert braucht der Untergrund nahezu keine Zeit mehr zum Rendern, da lediglich ein paar größere Bilder auf den Bildschirm gebracht werden müssen.
Das Problem an der ganzen Sache ist allerdings, dass eine größere Karte (100x100 Felder) recht lange Ladezeiten hat, da alle Pixel erst kopiert werden müssen. In SFML 2.1 steht auch, dass image -> copy eine langsame Funktion ist.

Meine Fragen:
Macht es aus Sicht eines „PRO“-grammierers überhaupt Sinn mehrere Rauten auf eine größere zu kopieren?
Wie können die Ladezeiten verkürzt werden?
Wie machen andere Programmierer ihren Untergrund im Spiel (nur 2D, nicht 3D)?

Mit dem optischen Resultat bin ich nämlich ganz zufrieden, ich hänge mal ein Bildchen an (Spielfeldgröße lediglich 25x25), ist zwar nicht ganz aktuell da manche Übergänge nochmals optimiert (kleine Kanten im Bild) wurden und diverse unterschiedliche Übergänge bereits erstellt sind, nur noch nicht vollständig implementiert (nicht nur die langweiligen geraden Kanten und Ecken…)


(Link)

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

2

26.11.2015, 16:04

Stichwort: sf:VertexArray an Stelle von Bildern kopieren. Das reduziert den Speicheraufwand und Zeichenaufwand recht deutlich. Man könnte z.B. 8x8 Kacheln mit allen ebenen in ein VertexArray packen, oder du speicherst jede Schicht in einem VertexArray.

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

3

26.11.2015, 16:59

Wenn der flache Boden mit HW Unterstuetzung gezeichnet wird, haben aktuelle Grafikkarten absolut kein Problem damit das in Echtzeit zu machen. Aber auch alles mit Render To Texture vorher zu cachen, sollte maximal Sekundenbruchteile dauern. Beides ist also eine Option, das ganze per CPU zu machen hingegen nicht.

4

26.11.2015, 20:54

Ok erst einmal danke :)

das sind jetzt zwei Dinge, mit denen ich mich noch nie beschäftigt habe....
Ich werde mal über beide Themen ein bisschen lesen. ;)

SlinDev

Treue Seele

Beiträge: 142

Wohnort: Lübeck

Beruf: Programmierer

  • Private Nachricht senden

5

28.11.2015, 13:55

Das "normale" Vorgehen wäre alles an statischer Geometrie in einige wenige Vertexarrays zu packen und deine Texturen in einen oder ein paar wenige Texturatlanten(!?) anzuordnen, d.h. eine große Textur aus deinen zusammen zu setzen.
Du hättest dann also eine große Textur mit allen deinen Kacheltexturen (jede Textur aber nur einmal) und eventuell auch allen Varianten an Übergängen. Beim Rendern hättest du deine einzelnen Rauten, aber alle zusammen in ein paar wenigen Objekten die sich dann schon ziemlich schnell rendern lassen sollten. Dabei wird über die Texturkoordinaten der Vertices der Rauten festgelegt welche Textur aus dem Texturatlas genutzt werden soll.
Wenn es danach noch zu langsam zu rendern ist könnte man z.B. wie von TGGC vorgeschlagen weiter optimieren.

@zimmer

Alter Hase

Beiträge: 1 135

Wohnort: NRW Germany

  • Private Nachricht senden

6

10.12.2015, 16:29

Parod0ntos3 : Du hast ein hübsches Projekt, ich wünsche Dir viel erfolg :)

Werbeanzeige