[Irrlicht]Crash programu przy jakimkolwiek zdarzeniu
Ostatnio zmodyfikowano 2012-07-26 17:53
Chlorek Temat założony przez niniejszego użytkownika |
[Irrlicht]Crash programu przy jakimkolwiek zdarzeniu » 2012-07-26 15:27:46 Więc mam następujący problem; za każdym razem, gdy nastąpi jakiś event mój program w Irrlicht robi crash. Nie mam pojęcia czemu, kod wziąłem prosto z oficjalnego kursu Irrlicht ( [URL]http://irrlicht.sourceforge.net/docu/example005.html[/URL] ). Jedyne co zmieniłem to struktura, która służy do przetrzymywania informacji o moim GUI. Oto kod (wyciąłem większość, zostawiłem jedynie button): struct MENU_DATA { IrrlichtDevice * device; s32 counter; };
enum { GUI_ID_SINGLEPLAYER_BUTTON = 101, GUI_ID_MULTIPLAYER_BUTTON, GUI_ID_SETTINGS_BUTTON, GUI_ID_CREDITS_BUTTON, GUI_ID_QUIT_BUTTON };
class MAIN_MENU_EVENTS_RECEIVER : public IEventReceiver { public: MAIN_MENU_EVENTS_RECEIVER( MENU_DATA & context ) : Context( context ) { } virtual bool OnEvent( const SEvent & event ) { if( event.EventType == EET_GUI_EVENT ) { s32 id = event.GUIEvent.Caller->getID(); IGUIEnvironment * Environment = Context.device->getGUIEnvironment(); switch( event.GUIEvent.EventType ) { case EGET_BUTTON_CLICKED: switch( id ) { case GUI_ID_QUIT_BUTTON: { Context.device->closeDevice(); return true; } default: return false; } break; default: break; } } return false; } private: MENU_DATA & Context; };
void drawMainMenu( IrrlichtDevice * device ) { device->getCursorControl()->setVisible( true ); IGUIEnvironment * Environment = device->getGUIEnvironment(); IGUISkin * skin = Environment->getSkin(); IGUIFont * font = Environment->getFont( "data\\gfx\\font\\font1.png" ); if( font ) { skin->setFont( font ); } skin->setFont( Environment->getBuiltInFont(), EGDF_TOOLTIP ); { rect < s32 > rect( 10, 10, 110, 30 ); Environment->addButton( rect, 0, GUI_ID_SINGLEPLAYER_BUTTON, L"Quit", L"Exits Program" ); } MENU_DATA m_data; m_data.device = device; m_data.counter = 0; MAIN_MENU_EVENTS_RECEIVER receiver( m_data ); device->setEventReceiver( & receiver ); }
A tu jak tworzę device: IrrlichtDevice * device = createDevice( EDT_OPENGL, core::dimension2d < u32 >( 800, 500 ), 32, false, false, false, 0 );
Crash występuje zawsze, gdy będzie wywołany jakiś event, np. gdy zmienię rozmiar okna, lub najadę myszką na pole okna. Jeśli zrobię komentarzem ostatnią linię podanego kodu (device->setEvent....) to "wszystko" jest ok. Czego to może być problem? Proszę o pomoc. |
|
pekfos |
» 2012-07-26 15:39:26 receiver przestaje istnieć po wyjściu z funkcji. Odwołanie do nieistniejącego = crash. |
|
Chlorek Temat założony przez niniejszego użytkownika |
» 2012-07-26 15:48:31 A jak mam zapobiec wyjściu z funkcji? Chcę aby funkcją tworzącą receiver nie był main. |
|
RazzorFlame |
» 2012-07-26 16:13:02 Zmienna globalna? |
|
Chlorek Temat założony przez niniejszego użytkownika |
» 2012-07-26 17:53:29 Trochę modyfikacji i się udało. Zamykam. |
|
« 1 » |