我的引擎的构造函数使用指向自身的指针(this)构造音频,视频和输入对象。但是,当我调试时,我看到我构造的所有类的enginePtr与调试器提供的值不同。
当我向内窥视时,我看到例如,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 :(得分:1)
这不太可能。您的代码对我来说似乎很合适。相反或依赖于调试器,尝试打印出'this'的值以及您在pRenderer中存储的任何内容。有时,使用优化标志调试器不会正确显示变量值。