[c++] kilka klas naraz
Ostatnio zmodyfikowano 2013-02-12 16:38
megatron Temat założony przez niniejszego użytkownika |
[c++] kilka klas naraz » 2013-02-11 20:50:57 Witam. Pewnie będzie jeszcze dużo pytań związanych z irrlicht'em z mojej strony. A moje pytanie na teraz brzmi, "jak mieć kilka klas w jednej grze/programie", ponieważ mam 3 klasy; od klawiatury bool klawisz[ KEY_KEY_CODES_COUNT ];
class Klawisze : public IEventReceiver { public: virtual bool OnEvent( const SEvent & event ) { if( event.EventType == irr::EET_KEY_INPUT_EVENT ) { klawisz[ event.KeyInput.Key ] = event.KeyInput.PressedDown; return false; } return false; } };
, myszki class Myszka : public IEventReceiver { public: virtual bool OnEvent( SEvent event ) { if( event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN ) { return 0; } return true; } };
, i gui class MyEventReceiver : public IEventReceiver { public: MyEventReceiver( SAppContext & context ) : Context( context ) { } virtual bool OnEvent( const SEvent & event ) { if( event.EventType == EET_GUI_EVENT ) { s32 id = event.GUIEvent.Caller->getID(); IGUIEnvironment * env = Context.device->getGUIEnvironment(); switch( event.GUIEvent.EventType ) { case EGET_BUTTON_CLICKED: switch( id ) { case GUI_ID_QUIT_BUTTON: Context.device->closeDevice(); return true; case GUI_ID_NEW_WINDOW_BUTTON: { Context.listbox->addItem( L"Utworz okno" ); Context.counter += 30; if( Context.counter > 200 ) Context.counter = 0; IGUIWindow * window = env->addWindow( rect < s32 >( 100 + Context.counter, 100 + Context.counter, 300 + Context.counter, 200 + Context.counter ), false, L"Test window" ); env->addStaticText( L"Prosze zamknij mnie", rect < s32 >( 35, 35, 140, 50 ), true, false, window ); } return true; case GUI_ID_FILE_OPEN_BUTTON: Context.listbox->addItem( L"Otworz plik" ); env->addFileOpenDialog( L"Prosze wybierz plik." ); return true; default: return false; } break; default: break; } } return false; } private: SAppContext & Context; };
. Może działać tylko jedna, a ja chciał bym żeby wszystkie mogły działać. A największym problemem jest dany kawałek kodu: class blablabla : public "IEventReceiver" ta część w cudzysłowiu nie może być zmieniona przez co inne klasy nie działają Moze by jakos polaczyc te wszystkie klasy |
|
megatron Temat założony przez niniejszego użytkownika |
» 2013-02-12 12:23:59 a dziedziczenie nic tu chyba by nie dało |
|
Monika90 |
» 2013-02-12 16:38:11 Jeżeli ta biblioteka (irrlicht) pozwala na użycie tylko jednego obiektu implementującego interfejs IEventReceiver i obiekt ten ma odbierać wszystkie możliwe zdarzenia, to nie masz wyjścia. Musisz połączyć wszystkie trzy metody OnEvent w jedną, w jednej klasie, i np. za pomocą switch sprawdzać rodzaj zdarzenia. Możesz też rozważyć użycie lepiej zaprojektowanej biblioteki... |
|
« 1 » |