3.2.2. MANIPULAÇÃO DE DISPOSITIVOS DE
ENTRADA
|
É
também no grupo ClanLib Display que existem as classes que permitem a
manipulação de dispositivos de entrada, como CL_InputContext, CL_InputDevice
e CL_InputEvent. A
Classe CL_InputContext é um contêiner de todos os diferentes tipos de
dispositivos de entrada disponíveis. Tais dispositivos são categorizados
como: teclado, mouse e joysticks (controladores de jogos). A
classe CL_InputDevice é uma abstração de todos os dispositivos de entrada e disponibiliza
um conjunto de funções para a utilização de tais dispositivos. O exemplo a
seguir mostra a criação de objetos representando os dispositivos de entrada: 1 CL_DisplayWindow window("Jogo",
640, 480); 2 CL_InputContext *ic =
window.get_ic(); 3 CL_InputDevice keyboard =
ic->get_keyboard(); 4 CL_InputDevice mouse =
ic->get_mouse(); 5 CL_InputDevice joystick =
ic->get_joystick(); Ainda
dentro do grupo ClanLib Display, encontra-se CL_InputEvent, que, em conjunto
com CL_InputDevice, permite capturar e tratar os diversos sinais emitidos
pelos dispositivos de entrada. Quando um sinal é emitido, após, por exemplo,
o pressionar de uma tecla, a ClanLib recebe um evento para o respectivo
dispositivo de entrada. Após o disparo desse evento, um objeto da classe
CL_InputEvent é passado para o slot que estiver ‘escutando’ aquele evento,
conforme no exemplo abaixo: 1 CL_Slot sTecla; 2 void setupSlot(CL_InputContext *ic){ 3 CL_InputDevice keyb =
ic->get_keyboard(); 4 sTecla=keyb.sig_key_down().connect(&TeclaP);} 5 void TeclaP (const CL_InputEvent
&event){ 6 std::cout << "Tecla: "
<< event.str.c_str();} Um
objeto da classe CL_Slot (responsável pela manipulação de slots) é criado na
linha 1. A linha 2 define uma função para inicializar o slot criado. O corpo
dessa função são as linhas 3, que cria um objeto para representar o teclado e
a linha 4, que conecta o slot criado, ao evento gerado após o pressionar de
uma tecla qualquer. A conexão do slot ao teclado tem como parâmetro, a
referência a uma função criada para processar o evento gerado (linhas 5 e 6). |