On Tue, Mar 18, 2003 at 06:55:45PM +0100, Jerker Hammarberg wrote:
Fast kanske kan man definiera generella objekt på högsta nivå:
class Item // Pinnar, BBQ-set mm class Character // Utskrivningsförrätare, Elvis [kanske också] class Scene
som innehåller så mycket generell funktionalitet att alla objekt kan definieras av parametrar hos de här klasserna.
Ja, absolut, det tycker jag också. Om inte annat för att hantera animering och grafik.
[..]
det kanske inte är så dumt att ha en dynamisk namnrymd för objekt i
spelet?
Visst! De borde matcha den konvention som vi redan har, tex "cliff.bbqset".
Ja, man kan säkert använd samma kod både för delar av resurshantering och för objekthantering i "manuskoden".
OK, vi verkar vara rörande överens! Tänker du hacka något ikväll?
Nej, det blir det nog inte.
Annars sätter jag igång, och satsar på att fixa till en gående Odd. Jag tror nämligen jag har kommit på ett sätt att fuska fram transparenta png-bilder.
Coolt!
En sista pusselbit tror jag (kanske) behövs: Garbage collection.
Anledningen är att när man har events som ligger och väntar på att få referera till objekt, som då kanske inte finns längre, så får man problem.
Exempel:
1) Skapa en "Task" för att hålla igång en animation av ett objekt. 2) I en helt annan del av koden dödas objektet, till exempel för att det har användts till något. Här kan man inte deleta objektet, eftersom Task:en håller en pekare till det, och kommer försöka ändra på objektets animation.
... Du förstår problemet, man vet aldrig vem som minns ett visst objekt.
I a.s. har jag en referensräknare i varje sprite, och man måste använda funktioner
sprite_acquire(sprite_t *s); //håller en pekare till s sprite_isvalid(sprite_t *s); //kollar om sprites fortfarande lever, måste användas innan man petar på s sprite_release(sprite_t *s); //släpper referensen. Om refcount <= 0 så frigör minne etc
I C++ kanske man kan använda såna där smarta pekare för att göra automatisk gc, har du erfarenhet av det?
Ulf