2010-11-12 11 views
0

конструктор для моего движка создает аудио, видео и объекты ввода с указателем на себя (это). Однако, когда я отлаживаю, я вижу, что все классы, которые я построил enginePtr, не совпадают с значением, предоставленным отладчиком.этот указатель, заданный Object (this)! = This

Когда я заглядываю внутрь, я вижу, например, enginePtr pRender имеет разные значения, чем двигатель. Для большинства из них установлено значение 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 или что-то еще?) –

+0

@Tony см. Править выше – jmasterx

+2

Это тоже не должно компилироваться: 'pReander = new cRender ((this);' is Синтаксически несовместимо. – dreamlax

ответ

1

Это очень маловероятно. Ваш код кажется логичным для меня. Вместо этого или полагаясь на отладчик, попробуйте распечатать значение «this» и все, что вы храните в pRenderer. Иногда с оптимизационными флагами отладчики не отображают значения переменных должным образом.

Смежные вопросы