Grafiken laden (Verhalten)
Verfasst: 21.12.2011, 20:42
Hallo ich arbeite gerade an einem kleinen Spielchen mit Items und so Sachen. Nun ist es so, dass jede Iteminstanz (von mir aus auch andere Instanzen die Grafiken nutzen wie GUI-Elemente etc) eine bestimmte Grafik haben. Instanzen gleichen Typs natürlich auch die gleichen Grafiken. Nun will man ja nicht Grafiken doppelt im Speicher haben.
Nun bieten sich mir folgende 3 Möglichkeiten.
1. Ich lade ALLE Grafiken zu Beginn und lege sie irgendwo zentral ab. Items und andere Objekte können sich dann über eine ID oder einen Namen ihre Grafik holen oder die jeweilige Grafik anzeigen lassen.
Vorteile:
- Man lädt nur einmal (am besten beim Programmstart) und vermeidet so das Laden zwischendurch.
Nachteile:
- Man lädt eventuell zu viel (vielleicht werden im Spiel nicht alle Items benutzt/angezeigt)
- Man muss irgendwie festhalten welche Grafiken existieren bzw. nötig sind (mit IDs). Könnte man vielleicht auch über Dateinamen und eine Art FindFirstFile/FindNextFile lösen.
- Viel Speicherverbrauch bei vielen Grafiken
2. Ich lade die jeweilige Grafik dann wenn ich sie das erste mal benötige und lasse sie dann im Speicher. Bei späterer Benutzung wird einfach wieder auf die gleiche Grafik verwiesen.
Vorteile:
- Man lädt nur die Grafiken die man wirklich benutzt
- Man lädt beim Programmstart nicht so lange
Nachteile:
- Man muss zwischendurch Laden
- Viel Speicherverbrauch bei langen Spielen und vielen Grafiken
3. Ich lade die jeweilige Grafik dann wenn ich sie benötige und gebe sie frei sobald ich sie nicht mehr benötige. Bei späterer Benutzung lade ich sie erneut.
Vorteile:
- Man lädt nur die Grafiken die man wirklich benutzt
- Man minimiert den Speicherverbrauch
- Man lädt beim Programmstart nicht so lange
Nachteile:
- Man muss feststellen wann eine Grafik nicht mehr gebraucht wird (ReferenceCounting etc)
- Man muss im worst-case dennoch oft zwischendurch nachladen
Ich würde gern eure Meinungen dazu hören. Ich tendiere eher zu Variante 1 oder 2.
In meinem konkreten Fall sollten die Daten nicht sonderlich groß werden allerdings kann man das ganze ja auch auf andere Daten übertragen (Sounds, etc).
Zu Bedenken ist auch noch dass ich einen Mod-Support anbieten möchte. Modder können dann beliebig viele eigene Grafiken nutzen. Ggf. müssten sie bei Variante 1 dann z.B. eine Grafikdatenbank etc mitpflegen.
Danke schonmal.
Nun bieten sich mir folgende 3 Möglichkeiten.
1. Ich lade ALLE Grafiken zu Beginn und lege sie irgendwo zentral ab. Items und andere Objekte können sich dann über eine ID oder einen Namen ihre Grafik holen oder die jeweilige Grafik anzeigen lassen.
Vorteile:
- Man lädt nur einmal (am besten beim Programmstart) und vermeidet so das Laden zwischendurch.
Nachteile:
- Man lädt eventuell zu viel (vielleicht werden im Spiel nicht alle Items benutzt/angezeigt)
- Man muss irgendwie festhalten welche Grafiken existieren bzw. nötig sind (mit IDs). Könnte man vielleicht auch über Dateinamen und eine Art FindFirstFile/FindNextFile lösen.
- Viel Speicherverbrauch bei vielen Grafiken
2. Ich lade die jeweilige Grafik dann wenn ich sie das erste mal benötige und lasse sie dann im Speicher. Bei späterer Benutzung wird einfach wieder auf die gleiche Grafik verwiesen.
Vorteile:
- Man lädt nur die Grafiken die man wirklich benutzt
- Man lädt beim Programmstart nicht so lange
Nachteile:
- Man muss zwischendurch Laden
- Viel Speicherverbrauch bei langen Spielen und vielen Grafiken
3. Ich lade die jeweilige Grafik dann wenn ich sie benötige und gebe sie frei sobald ich sie nicht mehr benötige. Bei späterer Benutzung lade ich sie erneut.
Vorteile:
- Man lädt nur die Grafiken die man wirklich benutzt
- Man minimiert den Speicherverbrauch
- Man lädt beim Programmstart nicht so lange
Nachteile:
- Man muss feststellen wann eine Grafik nicht mehr gebraucht wird (ReferenceCounting etc)
- Man muss im worst-case dennoch oft zwischendurch nachladen
Ich würde gern eure Meinungen dazu hören. Ich tendiere eher zu Variante 1 oder 2.
In meinem konkreten Fall sollten die Daten nicht sonderlich groß werden allerdings kann man das ganze ja auch auf andere Daten übertragen (Sounds, etc).
Zu Bedenken ist auch noch dass ich einen Mod-Support anbieten möchte. Modder können dann beliebig viele eigene Grafiken nutzen. Ggf. müssten sie bei Variante 1 dann z.B. eine Grafikdatenbank etc mitpflegen.
Danke schonmal.