2010-11-12 59 views
0

我的引擎的構造函數用自己的指針(this)構造音頻,視頻和輸入對象。但是,當我調試時,我看到構造的enginePtr的所有類與調試器提供的值不同。這個指針由Object(this)設置!= this

當我在裏面窺視時,例如,我看到,pRender的enginePtr與引擎的值不同。他們大多數都設置爲NULL,這會導致渲染崩潰。

這裏是我的引擎構造:

cEngine::cEngine(int flag) { 

    if (!al_get_system_driver()) { 

     this->isRunning = true; 

     al_init(); 

     // Uses DirectX by default, uncomment ALLEGRO_OPENGL for OpenGL. 
     if (flag == OPENGL_WINDOW || flag == OPENGL) al_set_new_display_flags(ALLEGRO_RESIZABLE | ALLEGRO_OPENGL); 
     else if (flag == DIRECTX_WINDOW || flag == DIRECTX) al_set_new_display_flags(ALLEGRO_RESIZABLE); 
     else if (flag == OPENGL_FULLSCREEN) al_set_new_display_flags(ALLEGRO_FULLSCREEN | ALLEGRO_OPENGL); 
     else if (flag == DIRECTX_FULLSCREEN) al_set_new_display_flags(ALLEGRO_FULLSCREEN); 

     this->display = createDisplay("Motherload C++", -1, -1, 640, 480); 

     srand((unsigned) time(0)); 

     pCam = new cCam(this); 
     pIO  = new cIO(this); 
     pMap = new cMap(this, setPoint(50, 50), setPoint(13, 20)); // 13, 20 
     pPlayer = new cPlayer(this); 
     pAudio = new cAudio(this); 
     pRender = new cRender(this); 
     pEvents = new cEvents(this); 

    } 
} 

cRender構造:

cRender::cRender(cEngine* pEngine) { 

    this->pPlayerLoc = pPlayerLoc; 
    this->BLACK   = al_map_rgb(30, 100, 200); 
    this->needsRedraw = false; 
    this->pEngine  = pEngine; 

    al_init_font_addon(); 
    al_init_ttf_addon(); 

    splitImages(); 
    //this->font = al_load_font("C:/resource/gisha.ttf", 24, 0); 
    //this->img = al_load_bitmap("C:/resource/rock.png"); 
} 

感謝

+0

沒有什麼概念錯誤,你正在嘗試......必須是一個小的實現細節。你可以向我們展示這些類之一的構造函數嗎(cCam,CIO,cAudio或其他...?) – 2010-11-12 02:38:54

+0

@Tony參見上面的編輯 – jmasterx 2010-11-12 02:40:40

+2

這不應該編譯,'pReander = new cRender((this);'是語法上不可編譯 – dreamlax 2010-11-12 02:40:42

回答

1

這不太可能。你的代碼對我來說在邏輯上看來很好。取而代之的還是依靠調試器,嘗試打印「this」的值以及存儲在pRenderer中的任何值。有時,使用優化標誌調試器不會正確顯示變量的值。