Entrée souris et clavier dans Gosu

Les jeux sont, par définition, interactifs. Gosu rend cette interaction simple avec une interface simple pour détecter et réagir aux pressions des touches et des boutons de souris.

Il existe deux façons principales de gérer les entrées dans votre programme. Le premier est une approche événementielle. Lorsque vous appuyez sur les boutons, vos programmes reçoivent un événement et vous pouvez réagir en conséquence. La seconde consiste à vérifier si, lors d'une mise à jour, un certain bouton est enfoncé. Les deux techniques sont parfaitement valables, utilisez celle qui vous convient le mieux.

Dans les coulisses, les boutons sont représentés par des nombres entiers. Ces codes entiers dépendent de la plate-forme et ne devraient probablement pas se retrouver dans votre code de jeu. Pour résumer cela, Gosu fournit un certain nombre de constantes à utiliser.

Pour chaque touche du clavier, il existe un Gosu:: Kb * constant. Pour la plupart des clés, les noms de ces constantes sont facilement devinables. Par exemple, les touches fléchées sont

instagram viewer
Gosu:: KbLeft, Gosu:: KbRight, Gosu:: KbUp et Gosu:: KbDown. Pour une liste complète, voir le documentation pour le module Gosu.

Les événements d'entrée sont livrés au Gosu:: Fenêtre exemple. Dans la boucle principale, avant mise à jour est appelé, Gosu fournira des événements pour tous les boutons qui ont été enfoncés ou relâchés. Il le fait en appelant le button_down et boutonner méthodes, en passant l'id de la touche ou du bouton enfoncé.

dans le button_down et boutonner méthodes, vous trouverez souvent un Cas déclaration. Ceci, en plus d'être très fonctionnel, fournit un moyen très élégant et expressif de décider quoi faire en fonction du bouton enfoncé ou relâché. Ce qui suit est un bref exemple de ce qu’un button_down peut ressembler. Il doit être placé dans votre Gosu:: Fenêtre sous-classe, et fermera la fenêtre (mettant fin au programme) lorsque le échapper la touche est enfoncée.

Facile, non? Développons cela. Voici une Joueur classe. Il peut se déplacer vers la gauche et la droite si vous appuyez sur les touches gauche et droite. Notez que cette classe a également button_down et boutonner méthodes. Ils fonctionnent comme les méthodes d'un Gosu:: Fenêtre sous-classe. Gosu ne sait rien Joueur cependant, nous appellerons le Joueurles méthodes manuellement à partir du Gosu:: Fenêtreles méthodes de. Un exemple complet et exécutable peut être trouvé ici.

Si l'entrée basée sur des événements n'est pas votre style, vous pouvez interroger Gosu:: Fenêtre pour voir si un bouton ou une touche est enfoncé, à tout moment. Vous pouvez ignorer le button_down et boutonner rappels entièrement.

Pour interroger le Gosu:: Fenêtre pour voir si une touche est enfoncée, appelez le button_down? avec l'ID du bouton que vous souhaitez vérifier. N'oubliez pas le point d'interrogation dans cet appel! Si vous appelez button_down (Gosu:: KbLeft), vous serez rapports un bouton, appuyez sur Gosu:: Fenêtre sous-classe. Même si aucune méthode de rappel n'est définie, la classe parente, Gosu:: Fenêtre volonté. Il n'y aura pas d'erreur, cela ne fonctionnera tout simplement pas comme prévu. N'oubliez pas ce point d'interrogation!

Voici la Joueur classe réécrite à utiliser button_down? au lieu d'événements. Un exemple complet et exécutable est disponible ici. Cette fois, l'entrée est vérifiée au début de la mise à jour méthode. Vous remarquerez également que cet exemple est plus court mais, à mon avis, moins élégant.

Les boutons de la souris sont gérés de la même manière que les boutons du clavier et de la manette de jeu. Vous pouvez à la fois les interroger avec button_down? et événements avec button_down et boutonner. Cependant, le mouvement de la souris ne peut être interrogé, il n'y a aucun événement pour le mouvement de la souris. Gosu:: Fenêtrec'est mouse_x et mouse_y Les méthodes fournissent les coordonnées X et Y du pointeur de la souris.

Notez que les coordonnées X et Y sont relatives à la fenêtre de jeu. Ainsi, par exemple, si la souris est dans le coin supérieur gauche, elle sera proche des coordonnées (0,0). De plus, si le pointeur de la souris est à l'extérieur de la fenêtre de jeu entièrement, il indiquera toujours où le pointeur est relatif à la fenêtre. Donc les deux mouse_x et mouse_y peut être inférieur à zéro et supérieur à la largeur ou la hauteur de la fenêtre.

Le programme suivant affichera un nouveau sprite où que vous cliquiez avec la souris. Notez qu'il utilise à la fois une entrée pilotée par les événements (pour les clics) et une entrée pilotée par les requêtes (pour obtenir la position de la souris). Un fichier complet et exécutable est disponible ici.

instagram story viewer