Murdocki
Gebruiker
- Lid geworden
- 7 jun 2007
- Berichten
- 449
hey,
ik heb een probleempje waarvan ik de oorzaak noch oplossing weet. Ik heb een array waarin ik een object wil stoppen maar het adres van dit object is tijdens de constructor anders dan wanneer dit object in het array geplaatst is. dit terwijl ik het adres met "this" op vraag (dit is een constante pointer). ik heb een aantal notities gemaakt van adressen die zet ik hier onder:
in constructor van scene:
scene's this: 0x00c6fcd8
scene's canvas: 0x00336d18
scene's canvas's scene: 0x00c6fcd8
in scenemanager:
array's start: 0x003367dc
array's canvas: 0x00336d18
array's canvas's scene: 0x00c6fcd8
in initialize van scene:
scene's this: 0x003367dc
de code hierbij is als volgt ( omliggende code heeft naar mijn idee geen invloed )
( onderstreepte code ook niet )
constructor van Scene
Root (dit is het stukje dat uitgevoerd wordt)
dus:
de scenemanager heeft een array van scenes
een scene heeft een canvas
een canvas heeft de scene die hem aangemaakt heeft
probleem is dus dat het canvas het oude adres van zijn scene bewaart terwijl dit adres verandert.
dingen die opvallen:
-in de constructor van scene zijn de adressen van scene naar canvas en terug goed gelinkt.
-als de scene in de array zit kent de canvas nog het juiste oude adres en de scene kent nog het goeie canvasadres
-in initialisatie van hetzelfde sceneobject wijst this ergens anders heen dan in de constructor. namelijk nu naar het begin van de array.
bvd,
Murdocki
ik heb een probleempje waarvan ik de oorzaak noch oplossing weet. Ik heb een array waarin ik een object wil stoppen maar het adres van dit object is tijdens de constructor anders dan wanneer dit object in het array geplaatst is. dit terwijl ik het adres met "this" op vraag (dit is een constante pointer). ik heb een aantal notities gemaakt van adressen die zet ik hier onder:
in constructor van scene:
scene's this: 0x00c6fcd8
scene's canvas: 0x00336d18
scene's canvas's scene: 0x00c6fcd8
in scenemanager:
array's start: 0x003367dc
array's canvas: 0x00336d18
array's canvas's scene: 0x00c6fcd8
in initialize van scene:
scene's this: 0x003367dc
de code hierbij is als volgt ( omliggende code heeft naar mijn idee geen invloed )
( onderstreepte code ook niet )
constructor van Scene
Code:
Scene::Scene( int width, int height, bool fullscreen, char* name )
: name( name )
{
canvas = new Canvas( this, width, height, fullscreen );
[U]window = 0;[/U]
}
Root (dit is het stukje dat uitgevoerd wordt)
Code:
bool SceneManager::createDefaultScene()
{
scenes[ 0 ] = Scene( 800, 600, false, "defaultScene" );
if( !scenes[ 0 ].initialize() )
return false;
[U] if( !scenes[ 0 ].createWindow() )
return false;
if( renderer->isUsable() )
{
renderer->createDevice( scenes[ 0 ].getCanvas() );
renderer->reset();
}
return true;[/U]
}
dus:
de scenemanager heeft een array van scenes
een scene heeft een canvas
een canvas heeft de scene die hem aangemaakt heeft
probleem is dus dat het canvas het oude adres van zijn scene bewaart terwijl dit adres verandert.
dingen die opvallen:
-in de constructor van scene zijn de adressen van scene naar canvas en terug goed gelinkt.
-als de scene in de array zit kent de canvas nog het juiste oude adres en de scene kent nog het goeie canvasadres
-in initialisatie van hetzelfde sceneobject wijst this ergens anders heen dan in de constructor. namelijk nu naar het begin van de array.
bvd,
Murdocki