Los juegos son, por definición, interactivos. Gosu simplifica esta interacción con una interfaz simple para detectar y reaccionar al presionar teclas y botones del mouse.
Hay dos formas principales de manejar la entrada en su programa. El primero es un enfoque orientado a eventos. Cuando se presionan los botones, sus programas reciben un evento y usted puede reaccionar en consecuencia. El segundo es verificar si, en el momento de una actualización, se presiona un botón determinado. Ambas técnicas son perfectamente válidas, use la que más le convenga.
Detrás de escena, los botones están representados por enteros. Estos códigos enteros dependen de la plataforma y probablemente no deberían encontrar su camino en el código del juego. Para resumir esto, Gosu proporciona una serie de constantes para usar.
Para cada tecla del teclado, hay un Gosu:: Kb * constante. Para la mayoría de las claves, los nombres de estas constantes se adivinan fácilmente. Por ejemplo, las teclas de flecha son Gosu:: KbLeft
, Gosu:: KbRight, Gosu:: KbUp y Gosu:: KbDown. Para una lista completa, vea el documentación para el módulo Gosu.Los eventos de entrada se entregan a Gosu:: Ventana ejemplo. En el bucle principal, antes actualizar se llama, Gosu entregará eventos para todos los botones que se han presionado o liberado. Lo hace llamando al abotonar y button_up métodos, pasando la identificación de la tecla o botón presionado.
En el abotonar y button_up métodos, a menudo encuentras un caso declaración. Esto, además de ser muy funcional, proporciona una forma muy elegante y expresiva de decidir qué hacer según el botón que se presionó o soltó. El siguiente es un breve ejemplo de lo que un abotonar El método puede parecerse. Debe colocarse en su Gosu:: Ventana subclase, y cerrará la ventana (finalizando el programa) cuando el escapar Se presiona la tecla.
Fácil, verdad? Expandamos esto. Aquí hay un Jugador clase. Se puede mover hacia la izquierda y hacia la derecha si se presionan las teclas izquierda y derecha. Tenga en cuenta que esta clase también tiene abotonar y button_up métodos. Funcionan igual que los métodos de un Gosu:: Ventana subclase Gosu no sabe nada sobre Jugador sin embargo, llamaremos al Jugadormétodos de forma manual desde el Gosu:: VentanaLos métodos de Se puede encontrar un ejemplo completo y ejecutable aquí.
Si la entrada basada en eventos no es su estilo, puede consultar cualquier Gosu:: Ventana para ver si se presiona cualquier botón o tecla, en cualquier momento. Puedes ignorar el abotonar y button_up devoluciones de llamada por completo.
Para consultar el Gosu:: Ventana para ver si se presiona una tecla, llame al ¿abotonar? método con la identificación del botón que desea verificar. ¡No olvide el signo de interrogación en esta llamada! Si llamas button_down (Gosu:: KbLeft), tú serás informes un botón presiona el Gosu:: Ventana subclase Incluso si no tiene ningún método de devolución de llamada definido, la clase principal, Gosu:: Ventana será. No habrá error, simplemente no funcionará como espera. ¡Solo no olvides ese signo de interrogación!
Aquí está el Jugador clase reescrita para usar ¿abotonar? en lugar de eventos Un ejemplo completo y ejecutable está disponible aquí. Esta vez, la entrada se verifica al comienzo del actualizar método. También notará que este ejemplo es más corto pero, en mi opinión, menos elegante.
Los botones del mouse se manejan de la misma manera que los botones del teclado y el gamepad. Ambos pueden consultarlos con ¿abotonar? y eventos con abotonar y button_up. Sin embargo, el movimiento del mouse solo se puede consultar, no hay eventos para el movimiento del mouse. Gosu:: Ventana's mouse_x y pardusco Los métodos proporcionan las coordenadas X e Y del puntero del mouse.
Tenga en cuenta que las coordenadas X e Y son relativas a la ventana del juego. Entonces, por ejemplo, si el mouse está en la esquina superior izquierda, estará cerca de la coordenada (0,0). Además, si el puntero del mouse es fuera de de la ventana del juego por completo, aún informará dónde está el puntero en relación con la ventana. Por lo tanto mouse_x y pardusco puede ser menor que cero y mayor que el ancho o alto de la ventana.
El siguiente programa mostrará un nuevo sprite donde haga clic con el mouse. Tenga en cuenta que utiliza tanto la entrada dirigida por eventos (para los clics) como la entrada dirigida por consultas (para obtener la posición del mouse). Un archivo completo y ejecutable está disponible aquí.