Os jogos são, por definição, interativos. O Gosu torna essa interação direta com uma interface simples para detectar e reagir ao pressionamento de teclas e botões do mouse.
Existem duas maneiras principais de lidar com a entrada no seu programa. A primeira é uma abordagem orientada a eventos. Quando os botões são pressionados, seus programas recebem um evento e você pode reagir de acordo. O segundo é verificar se, no momento de uma atualização, um certo botão é pressionado. Ambas as técnicas são perfeitamente válidas, use a que melhor lhe convier.
Nos bastidores, os botões são representados por números inteiros. Esses códigos inteiros dependem da plataforma e provavelmente não devem aparecer no código do jogo. Para resumir isso, Gosu fornece várias constantes para usar.
Para cada tecla do teclado, há um Gosu:: Kb * constante. Para a maioria das chaves, os nomes dessas constantes são facilmente adivinhados. Por exemplo, as teclas de seta são Gosu:: KbLeft, Gosu:: KbRight, Gosu:: KbUp e Gosu:: KbDown. Para uma lista completa, consulte o documentação para o módulo Gosu.
Eventos de entrada são entregues ao Gosu:: Janela instância. No loop principal, antes atualizar é chamado, o Gosu entregará eventos para todos os botões que foram pressionados ou liberados. Faz isso chamando o button_down e abotoar métodos, passando o ID da tecla ou botão pressionado.
No button_down e abotoar métodos, você geralmente encontra um caso declaração. Isso, além de ser muito funcional, fornece uma maneira muito elegante e expressiva de decidir o que fazer, dependendo de qual botão foi pressionado ou liberado. A seguir, é apresentado um pequeno exemplo de como button_down pode parecer. Deve ser colocado no seu Gosu:: Janela subclasse e fechará a janela (finalizando o programa) quando o fuga tecla é pressionada.
Fácil né? Vamos expandir isso. Aqui está um Jogador classe. Pode mover-se para a esquerda e direita se as teclas esquerda e direita forem pressionadas. Observe que esta classe também possui button_down e abotoar métodos. Eles funcionam exatamente como os métodos de um Gosu:: Janela subclasse. Gosu não sabe nada sobre Jogador no entanto, chamaremos o Jogadormétodos manualmente a partir do Gosu:: Janelamétodos. Um exemplo completo e executável pode ser encontrado aqui.
Se a entrada baseada em evento não for o seu estilo, você poderá consultar qualquer Gosu:: Janela para ver se algum botão ou tecla é pressionado a qualquer momento. Você pode ignorar o button_down e abotoar retornos de chamada inteiramente.
Para consultar o Gosu:: Janela para ver se uma tecla é pressionada, ligue para o button_down? com o ID do botão que você deseja verificar. Não esqueça o ponto de interrogação nesta ligação! Se você ligar button_down (Gosu:: KbLeft), você vai ser comunicando pressione um botão para Gosu:: Janela subclasse. Mesmo se você não tiver nenhum método de retorno de chamada definido, a classe pai, Gosu:: Janela vai. Não haverá erro, apenas não funcionará como o esperado. Só não esqueça esse ponto de interrogação!
Aqui está o Jogador classe reescrita para usar button_down? em vez de eventos. Um exemplo completo e executável está disponível aqui. Desta vez, a entrada é verificada no início do atualizar método. Você também notará que este exemplo é mais curto, mas, na minha opinião, menos elegante.
Os botões do mouse são tratados da mesma maneira que os botões do teclado e do gamepad. Você pode consultá-los com button_down? e eventos com button_down e abotoar. No entanto, o movimento do mouse pode ser consultado apenas, não há eventos para o movimento do mouse. Gosu:: Janelaé mouse_x e mouse_y Os métodos fornecem as coordenadas X e Y do ponteiro do mouse.
Observe que as coordenadas X e Y são relativas à janela do jogo. Por exemplo, se o mouse estiver no canto superior esquerdo, ele estará próximo da coordenada (0,0). Além disso, se o ponteiro do mouse estiver lado de fora inteiramente da janela do jogo, ele ainda informa onde o ponteiro é relativo à janela. Então ambos mouse_x e mouse_y pode ser menor que zero e maior que a largura ou altura da janela.
O programa a seguir exibirá um novo sprite sempre que você clicar no mouse. Observe que ele usa a entrada orientada a eventos (para os cliques) e a entrada orientada a consultas (para obter a posição do mouse). Um arquivo executável completo está disponível aqui.