mercoledì 26 agosto 2009

Input multipiattaforma con OIS - 2a parte

Nella seconda parte di questo tutorial vedremo come creare i dispositivi necessari alla lettura dei vari input e come appunto ottenere queste informazioni. L'ultimo passaggio della parte precedente è stata la creazione dell'istanza dell'InputManager, ora con quest'ultimo potremo procedere alla crezione dei devices:

OIS::Keyboard *oisKeyboard = static_cast(oisInputManager->createInputObject(OIS::OISKeyboard, false));
OIS::Mouse *oisMouse = static_cast(oisInputManager->createInputObject(OIS::OISMouse, false));
OIS::JoyStick *oisJoystick = NULL;
try
{
    oisJoystick = static_cast  (oisInputManager->createInputObject(OIS::OISJoyStick, false));
}
catch(...)
{
    oisJoystick = NULL;
}

La creazione del device del joystick è stata inserita in un blocco try&catch perchè altimenti la libreria solleverebbe un eccezione nel caso in cui non vi fosse collegato un joystick alla macchina. In realtà noi diamo per scontato che tastiera e mouse lo siano... altrimenti sarebbe necessario inserire anche le due precedenti righe in altrettanti blocchi try&catch.

Il passo successivo è definire l'area di clipping iniziale delle coordinate del mouse, larghezza e altezza di solito saranno quelle relative alla finestra della nostra applicazione. Quest'operazione dovrà essere ripetuta anche in caso di resize della finestra.

if(oisMouse != NULL)
{
    const OIS::MouseState &ms = oisMouse->getMouseState();
    ms.width = width;
    ms.height = height;
}

Ora che abbiamo completato l'inizializzazione di OIS, vediamo come leggere i devices nel ciclo di update dell'applicazione, iniziamo dal mouse:

const OIS::MouseState &ms = this->oisMouse->getMouseState();

Nella variabile ms potremo leggere le coordinate del mouse assolute e relative rispettivamente con ms.X.abs e ms.X.rel, questo vale anche per Y e Z. Per leggere lo stato dei pulsanti invece useremo ms.buttons con un and con la costante del tasto che ci interessa verificare (es. ms.buttons & OIS::MB_Right), ecco una tabella riassuntiva:

OIS::MB_Left      // tasti sinistro, centrale e destro
OIS::MB_Middle
OIS::MB_Right
OIS::MB_Button3   // eventuali bottoni aggiuntivi da 3 a 7
[...]
OIS::MB_Button7

To be continued...

0 commenti:

Posta un commento

About This Blog

  © Blogger template PingooIgloo by Ourblogtemplates.com 2009

Back to TOP