Ingresso mouse e tastiera in Gosu

I giochi sono, per definizione, interattivi. Gosu semplifica questa interazione con una semplice interfaccia per rilevare e reagire alla pressione dei tasti e del mouse.

Esistono due modi principali per gestire l'input nel tuo programma. Il primo è un approccio orientato agli eventi. Quando vengono premuti i pulsanti, i tuoi programmi ricevono un evento e puoi reagire di conseguenza. Il secondo è verificare se, al momento di un aggiornamento, viene premuto un determinato pulsante. Entrambe le tecniche sono perfettamente valide, usate quella che vi si addice meglio.

Dietro le quinte, i pulsanti sono rappresentati da numeri interi. Questi codici interi dipendono dalla piattaforma e probabilmente non dovrebbero trovare la loro strada nel codice di gioco. Per astrarre questo, Gosu fornisce un numero di costanti da usare.

Per ogni tasto della tastiera, c'è un Gosu:: Kb * costante. Per la maggior parte delle chiavi, i nomi di queste costanti sono facilmente indovinabili. Ad esempio, i tasti freccia sono

instagram viewer
Gosu:: KbLeft, Gosu:: KbRight, Gosu:: KbUp e Gosu:: KbDown. Per un elenco completo, vedere il documentazione per il modulo Gosu.

Gli eventi di input vengono consegnati al Gosu:: Window esempio. Nel ciclo principale, prima aggiornare viene chiamato, Gosu invierà eventi per tutti i pulsanti che sono stati premuti o rilasciati. Lo fa chiamando il bottone giù e abbottonare metodi, passando l'id del tasto o pulsante premuto.

Nel bottone giù e abbottonare metodi, spesso trovi a Astuccio dichiarazione. Questo, oltre ad essere molto funzionale, fornisce un modo molto elegante ed espressivo per decidere cosa fare a seconda del pulsante premuto o rilasciato. Di seguito è riportato un breve esempio di ciò che a bottone giù il metodo può assomigliare. Dovrebbe essere inserito nel tuo Gosu:: Window sottoclasse e chiuderà la finestra (terminando il programma) quando il fuga viene premuto il tasto.

Facile vero? Espandiamo questo. Ecco un Giocatore classe. Può spostarsi a sinistra e a destra se si premono i tasti sinistro e destro. Nota che anche questa classe ha bottone giù e abbottonare metodi. Funzionano proprio come i metodi di a Gosu:: Window sottoclasse. Gosu non ne sa nulla Giocatore tuttavia, chiameremo il Giocatoremetodi manualmente dal Gosu:: Windowmetodi. È possibile trovare un esempio completo e eseguibile Qui.

Se l'input basato su eventi non è il tuo stile, puoi interrogare qualsiasi Gosu:: Window per vedere se viene premuto un pulsante o un tasto, in qualsiasi momento. Puoi ignorare il bottone giù e abbottonare richiamate del tutto.

Per interrogare il Gosu:: Window per vedere se viene premuto un tasto, chiamare il bottone giù? con l'id del pulsante che desideri controllare. Non dimenticare il punto interrogativo in questa chiamata! Se chiami button_down (Gosu:: KbLeft), tu sarai segnalazione un pulsante premere per Gosu:: Window sottoclasse. Anche se non hai definito alcun metodo di callback, la classe genitore, Gosu:: Window volontà. Non ci saranno errori, semplicemente non funzionerà come previsto. Basta non dimenticare quel punto interrogativo!

Ecco il Giocatore classe riscritta per l'uso bottone giù? invece di eventi. È disponibile un esempio completo e eseguibile Qui. Questa volta, l'input viene verificato all'inizio di aggiornare metodo. Noterai anche che questo esempio è più breve ma, a mio avviso, meno elegante.

I pulsanti del mouse sono gestiti allo stesso modo dei pulsanti della tastiera e del gamepad. Puoi interrogarli entrambi con bottone giù? ed eventi con bottone giù e abbottonare. Tuttavia, è possibile interrogare solo il movimento del mouse, non ci sono eventi per il movimento del mouse. Gosu:: Window'S mouse_x e mouse_y i metodi forniscono le coordinate X e Y del puntatore del mouse.

Nota che le coordinate X e Y sono relative alla finestra di gioco. Quindi, ad esempio, se il mouse si trova nell'angolo in alto a sinistra, sarà vicino alle coordinate (0,0). Inoltre, se il puntatore del mouse è al di fuori della finestra di gioco interamente, riporterà comunque dove il puntatore è relativo alla finestra. Quindi entrambi mouse_x e mouse_y può essere inferiore a zero e superiore alla larghezza o all'altezza della finestra.

Il seguente programma mostrerà un nuovo sprite ovunque tu faccia clic con il mouse. Si noti che utilizza sia l'input guidato dall'evento (per i clic) sia l'input guidato dalla query (per ottenere la posizione del mouse). È disponibile un file completo e eseguibile Qui.

instagram story viewer