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

FreezingEngine

Treue Seele

  • »FreezingEngine« ist der Autor dieses Themas

Beiträge: 280

Wohnort: NRW

Beruf: Schüler

  • Private Nachricht senden

41

27.06.2012, 19:28

>.< ich schäme mich in Grund und Boden....KLAR hatte den debug modus xD Da machen schon Listen mit 100 Einträgen probs...

Naja Danke läuft mit ~400 FPS xD

Danke an Alle :D

1700 Sprites bzw. Tiles = ~150 FPS

und nochmal:

10.000 Sprites bzw. Tiles = ~ 30 FPS


Da dieser Thread aber ALLGEMEINE Fragen zu Tilemaps heißt hätt ich gleich noch eine,
undzwar wie speichert ihr eure Tilemaps?
Und wie liest ihr sie ein?

Ich würde spontan an einer simplen Textdatei denken und vom hören sagen fällt mir xml ein,
was sagt ihr?
"He who sacrifices freedom for security deserves neither."
Benjamin Franklin

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »FreezingEngine« (27.06.2012, 19:52)


David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

42

27.06.2012, 19:50

ich denke nicht, dass das schneller ist. Erst alle Tiles rendern, die Textur 1 haben, dann alle mit Textur 2 etc? Näh, das macht wohl (in SFML) kaum einen Unterschied; höchstens die Anzahl der Textursets wird erhöht. Allerdings hatte ich bei den ersten versuchen mit Tilemaps (in SFML 1.6, ohne RenderTextures) nicht einmal Texturen auf den Tiles, sondern einfach weiße Farbe. War trotzdem saulahm. Ein anderer Vorteil davon, alles in eine Textur zu rendern, ist dass man sie als ganzes Modifizieren (rotieren, verzerren, shadereffekte etc) kann, ohne viel arbeit und performanceverlust.


Nein.. Im Idealfall hast du nur einen Texturatlas, und sparst dir damit jeglichen Texturswitch für die Sprites. Wenn du die Sprites dann alle in einen Vertexpuffer sammelst, kannst du alles in einem Rutsch zeichnen. Postprocessing kann ja immer noch auf dem Framebuffer ausgeführt werden.
@D13_Dreinig

CBenni::O

1x Contest-Sieger

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

43

27.06.2012, 20:38

>.< ich schäme mich in Grund und Boden....KLAR hatte den debug modus xD Da machen schon Listen mit 100 Einträgen probs...

Gefällt mir nicht. Debug Modus wegzulassen, nur damit das Spiel testbar ist, ist eine dämliche idee. Verwende entweder die Lösung von David&co oder meine, dann kannste in beiden Modi arbeiten.


Da dieser Thread aber ALLGEMEINE Fragen zu Tilemaps heißt hätt ich gleich noch eine,
undzwar wie speichert ihr eure Tilemaps?
Und wie liest ihr sie ein?

Ich würde spontan an einer simplen Textdatei denken und vom hören sagen fällt mir xml ein,
was sagt ihr?

Ich würde (je nach größe des Spiels) eher zu einer Binären Datei raten. Du hast sicherlich Tile-typen (0-255), die können einfach in eine binärdatei geschrieben werden
Textdateien haben den nachteil, dass sie nur sehr invariabel gestaltet werden können. Zudem hast du einen gewaltigen Overhead, wenn du die Daten nicht binär speicherst.
Wir hatten mal eine Diskussion dazu im Forum.

XML/XDS wäre eine gute Wahl. Du kannst am anfang mit textdateien Arbeiten und ohne viel Arbeit zu XDS umsteigen (XDS ist ein binäres Format, das XML in vielen Punkten ähnelt).

Zur Speicherung direkt: Ich rate dazu, die Map nicht Zeile für Zeile zu Speichern, sondern in "Chunks" z.B. 16x16 Blöcke (diese in Zeile-für-Zeilenform). So kannst du ggf immer nur die Teile laden, die Gerade benötigt werden, und musst nicht die Ganze Map einlesen, um an deine Daten ranzukommen. XML/XDS werden dir hier gute Dienste leisten.

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

44

27.06.2012, 20:47

Ich erstell mir meine mit Tiled und das speichert sie mir im XML Format. Simpel und gut.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

FreezingEngine

Treue Seele

  • »FreezingEngine« ist der Autor dieses Themas

Beiträge: 280

Wohnort: NRW

Beruf: Schüler

  • Private Nachricht senden

45

27.06.2012, 21:42

@Architekt

Klingt intressant habs mir auch angeschaut, wie bindest du denn diese Map ein und wie überprüfst du die Kollision?

Übrigens sehe ich das man die Map auch in eine Txt speichern kann, genausowie die txt aussieht hab ich mir das speichern vorgestellt nur wie funzt das laden?

@Benni

Ein Feldblock(Chunk) erstellen und nur die chunks laden die ich brauche?
Das ist das gleiche wie zu prüfen ob die Tiles zu sehen sind.

"Gefällt mir nicht. Debug Modus wegzulassen, nur damit das Spiel testbar ist, ist eine dämliche idee. Verwende entweder die Lösung von David&co oder meine, dann kannste in beiden Modi arbeiten."

ich habe doch gesagt ich habe die perfomence bei so vielen sprites geteste wie sichtbar sind da war die peformence schlecht.
Wenn ich jetzt ne größere Map nehme und alles ausblende was nicht zu sehen ist, läufts aufs gleiche hinnaus^^
"He who sacrifices freedom for security deserves neither."
Benjamin Franklin

CBenni::O

1x Contest-Sieger

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

46

27.06.2012, 22:46

Nein tut es nicht. Wenn du 100k Tiles hast, von denen 1k zu sehen sind, und du prüftst für JEDES der 100k Tiles, ob es zu sehen ist, na dann gute nacht.
Wenn du aber jeweils 10x10 Tiles zu einem Block zusammenfasst, hast du um den Faktor 100 weniger tests (im Optimalfall/Durchschittsfall, wenn n sehr groß ist).

mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

47

27.06.2012, 22:54

Und wenn du die Tiles einfach in einem 2D Array ablegst, brauchst du gar nix testen... ;)

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

48

27.06.2012, 23:10

Naja Danke läuft mit ~400 FPS xD

Danke an Alle :D

1700 Sprites bzw. Tiles = ~150 FPS

und nochmal:

10.000 Sprites bzw. Tiles = ~ 30 FPS


eine 84.000 Tiles große Map, die mit ~ 50 FPS läuf!
und das mit Python und Pygame!
=D

(eigentlich nicht unbedingt sehr performant, wenn man bedenkt, dass nur die sichtbaren 7.056 durchgegangen werden dürften... sollte ich an dem Projekt mal wieder was machen, sollte ich da evtl. mal drüber schauen...)


Mapformat:
in dem Fall hatte ich ein einfaches textuelles Format genommen, welches allerdings auf keinem standardisierten Format basiert
Beispielmap
in der Datei sind folgende Informationen (Zeilenweise) abgelegt:
Gebiet (ein Gebiet sammelt Informationen, die für mehrere Maps gleich sind, wobei es unter diesen wiederum eine Hirarchie gibt - alleine dazu könnte ich schon einiges Schreiben)
Breite in Tiles
Höhe in Tiles
Anzahl der Ebenen
Tilesetname
die Indizes - eine Zeile stellt eine Reihe dar, nach der ersten Ebene folgt die zweite
die Anzahl der auf der Map befindlichen NPCs
ggf. die Informationen über die NPCs

Map in Chunks speichern: kommt auf das Leveldesign an
wenn die Map einen Anschein von "Endlosigkeit" haben soll (man also ohne "Teleporte" über ein enorm großes Gebiet gehen muss, welches somit in einer Map gespeichert werden muss), dann ist der Ansatz mit Chunks sinnvoll
wenn die Maps aber grundsätzlich nicht sehr groß werden sollen (beispielsweise nicht viel größer als 100x100), dann ist es nicht unbedingt sinnvoll, Chunks einzusetzen

für das Speichern von Maps gibt es enorm viele verschiedene Möglichkeiten, welche alle verschieden gut sind (und ich will nicht sagen, dass meine Lösung besonders gut ist)


Kollision (mit der Map):
meine Map ist in mehrere Ebenen eingeteilt
der Spieler befindet sich in der Regel auf der Map mit dem Index 1 und unter ihm (Index 0) befindet sich der Boden, auf dem er läuft (das Gras etc. ...)
alles, was auf seiner Ebene ist, steht den Charakteren grundsätzlich im Weg (Kollisionsprüfung)
mit der Map wird die Kollisionsprüfung unter der Annahme vorgenommen, dass die Tiles, Charaktere, Objekte etc. Rechteckig sind
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Werbeanzeige