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

02.07.2018, 13:21

Performance im ECS (Entity Component System)

Hallo Leute,

brauche mal einen Denkanstoß in Sachen Entity Component System und Performance.

Geschichte


An sich bin ich wirklich zufrieden mit den Ansätzen die ich jetzt schon habe nur ergibt sich ein riesen Problem

Problem
Sobald ich mehrere Sprites auf einmal rendere bspw. 21x14 Tile Map und einen Spieler, merkt man wie die Performance ziemlich weit runter geht.
So wie es momentan aufgebaut ist, werde ich wohl ab einer gewissen Anzahl von Systemen/Entities extreme Performance Probleme bekommen.
Das wird auch an dem oben genannten Problem mit den ganzen iterationen über alle Objekte in jedem System liegen.

Frage
Auf Google finde ich meistens nur Aritkel welche die absoluten Basics behandeln oder in welchen dann hardwarenahe Sprachen benutzt werden (Obj. C, C++ ...) und wo es dann um Speicheradressierung und den ganzen kram geht.

Wie bekomme ich das ganze System flotter bzw. wie würdet Ihr an die Sache rangehen?

Momentan würde mir ehrlich gesagt nur cachen in den Sinn kommen. Bspw. werden beim Spielstart alle Entities durchlaufen und in einem Cache abgelegt. Wenn ich nun neue Entities hinzufüge oder lösche, wird der Cache wieder aktualisiert. Somit müssen die Systeme zumindest nur noch "Ihren Teil" abarbeiten und nicht immer und immer wieder alles Entities filtern.


Vielen Dank für eure Zeit!

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

02.07.2018, 15:52

Das wird auch an dem oben genannten Problem mit den ganzen iterationen über alle Objekte in jedem System liegen.

Weißt du das, weil du es gemessen hast, oder ist das eine reine Vermutung?
Ganz wichtig bei sowas ist, dass du erstmal rausfindest, wo dein Programm die Zeit verbrät. Moderne IDEs wie Visual Studio bringen dafür entsprechende Tools mit (Profiler).
Also erstmal messen, dann gezielt optimieren. Dann wieder messen und schauen, ob's geholfen hat.

Wirago

Alter Hase

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

3

02.07.2018, 16:18

Sobald ich mehrere Sprites auf einmal rendere bspw. 21x14 Tile Map und einen Spieler, merkt man wie die Performance ziemlich weit runter geht.


Dann machst du irgendwas falsch.
Eine unserer Maps ist 120x120 tiles groß, beinhaltet etwa 20 animierte NPCs und mehrere animierte Objekte (Flammen, Wasserfälle etc) und da ruckelt nichts (60 fps cap).

4

02.07.2018, 16:42

Tut mir echt Leid.
Ich A********* habe die Render Methode vom PIXIJS Renderer in ner forEach Schleife aufgerufen und nicht am Ende wenn alle Sprites bearbeitet sind....
Jetzt läufts auch bei 21x14 extrem flüssig.

Oh man sorry das ich sowas dummes nicht gesehen habe >.<

Wirago

Alter Hase

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

5

02.07.2018, 16:57

Musst dich nicht entschuldigen :)
Wichtig ist, dass du den Fehler selber gefunden hast. Nur so kommt man weiter.

Werbeanzeige