Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[c++] kilka klas naraz

Ostatnio zmodyfikowano 2013-02-12 16:38
Autor Wiadomość
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
C/C++
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
C/C++
class Myszka
    : public IEventReceiver
{
public:
    virtual bool OnEvent( SEvent event )
    {
       
        if( event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN )
        {
            return 0;
        }
       
        return true;
    }
};
, i gui
C/C++
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, // modal?
                        L"Test window" );
                       
                        env->addStaticText( L"Prosze zamknij mnie",
                        rect < s32 >( 35, 35, 140, 50 ),
                        true, // border?
                        false, // wordwrap?
                        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:
C/C++
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
P-76177
megatron
Temat założony przez niniejszego użytkownika
» 2013-02-12 12:23:59
a dziedziczenie nic tu chyba by nie dało
P-76191
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...
P-76196
« 1 »
  Strona 1 z 1