When I say instancing, I mean in the sense of making an object pointer which changes when the object does ( the object, not the data within, which of course is updated automatically. )
Something like this demonstrates the problem :
SuperStrict
Type pImage
Field Width:Int
Field Height:Int
Field Data:Byte[]
End Type
Type pGhost
Field Img:pImage
End Type
Global AnImage:pImage=New pImage
AnImage.Width=100
AnImage.Height=200
Global AGhost:pGhost=New pGhost
AGhost.Img=AnImage
AnImage=New pImage
AnImage.Width=99
AnImage.Height=199
' RESTORE THE GHOST IMAGE HERE
'/RESTORE THE GHOST IMAGE HERE
DebugLog AGhost.Img.Width
AnImage is now a different object, but AGhost still points to the old image. Obviously it's not an example I would use, but it's simpler to read than a real world example. A real world example ( to show why I need this ) would be when the user changes resolution mid-way through a game. I don't want to destroy all my game objects ( Ghosts ) but I have to reload all the images when the res changes. So I need to restore all the ghosts ( and other game objects ) so they refer to valid image objects.
I'd prefer not to do something unwieldy like maintaining lists of every game object which uses each image object, though this would work, I suppose.
I think it's my old nemesis, the pointer, doing my head in again.
|