Entrée GamePad


GameMaker Studio 2 dispose d'un certain nombre de fonctions dédiées qui peuvent être utilisées pour détecter les contrôles analogiques et numériques à partir de plusieurs pads de jeu connectés. Ces fonctions fonctionnent de la même manière que les entrées de l' appareil, en ce sens que vous pouvez détecter jusqu'à quatre pads de jeu XInput connectés (et jusqu'à 8 manettes de jeu DirectInput) et gérer les entrées de chacun en utilisant les mêmes fonctions. Notez que lorsqu'une manette est branchée sur votre appareil (ou qu'elle est retirée), un événement système asynchrone est déclenché, dans lequel vous pouvez gérer la situation en utilisant les fonctions appropriées.

Les gamepad "slots" sont indexés à partir de 0 avec les slots 0 - 3 inclus étant uniquement pour les gamepads Xinput, à savoir: les contrôleurs Xbox360 et compatibles. Cependant, vous pouvez également vérifier les slots 4 - 11 inclus pour les gamepads DirectInput, ce qui signifie que vous pouvez détecter de nombreux autres modèles de contrôleurs lorsqu'ils sont connectés via ces slots. Il convient de noter que lorsque vous utilisez les manettes de jeu DirectInput, les constantes indiquées ci-dessous peuvent ne pas correspondre exactement aux boutons que vous attendez lorsqu'elles sont enfoncées, à cause de la manière fragmentée et non standardisée de l'API. Il est recommandé d'avoir une sorte d'écran de configuration de la manette de jeu dans vos jeux où les gens peuvent redéfinir les boutons de la manette en fonction de l'entrée de n'importe quel appareil connecté pour atténuer les problèmes. Notez également que l'interface d'entrée directe est exécutée en mode coopératif, ce qui signifie que votre jeu n'a d'accès que lorsqu'il est l'application de premier plan, ce qui provoque la perte des contrôleurs d'entrée directe si le jeu utilise le focus et le trouve ensuite à nouveau quand il revient sur le point (cela peut être détecté dans l'événement système et traité).

Lorsque vous travaillez avec les fonctions de la manette de jeu, il y a un certain nombre de constantes intégrées qui devraient être utilisées pour obtenir / définir les boutons et l'axe du bâton etc...:

Constant La description
gp_face1 Bouton supérieur 1 (ceci correspond au "A" sur un contrôleur Xbox 360 et à la croix sur un contrôleur PS)
gp_face2 Bouton supérieur 2 (ceci correspond au "B" sur un contrôleur Xbox 360 et au cercle sur un contrôleur PS)
gp_face3 Bouton supérieur 3 (ceci correspond au "X" sur un contrôleur Xbox 360 et au carré sur un contrôleur PS)
gp_face4 Bouton supérieur 4 (ceci correspond au "Y" sur un contrôleur Xbox 360 et au triangle sur un contrôleur PS)
gp_shoulderl Bouton de l'épaule gauche
gp_shoulderlb Gâchette d'épaule gauche
gp_shoulderr Bouton de l'épaule droite
gp_shoulderrb Gâchette d'épaule droite
gp_select Le bouton de sélection (il s'agit d'une pression sur un contrôleur PS4)
gp_start Le bouton de démarrage (c'est le bouton "options" sur un contrôleur PS4)
gp_stickl Le stick gauche appuyé (comme un bouton)
gp_stickr Le stick droit pressé (comme un bouton)
gp_padu D-pad up
gp_padd D-pad vers le bas
gp_padl D-pad à gauche
gp_padr D-pad droit
gp_axislh Bâton gauche axe horizontal (analogique)
gp_axislv Axe vertical gauche (analogique)
gp_axisrh Axe horizontal du stick droit (analogique)
gp_axisrv Axe vertical du stick droit (analogique)


Pour mieux comprendre exactement quelle partie du contrôleur chaque constante représente, vous pouvez vous référer à l'image suivante d'une manette standard:

Vous trouverez ci-dessous une liste de toutes les fonctions du gamepad:

  1. gamepad_is_supported
  2. gamepad_get_device_count
  3. gamepad_is_connected
  4. gamepad_get_description
  5. gamepad_get_button_threshold
  6. gamepad_set_button_threshold
  7. gamepad_axis_count
  8. gamepad_axis_value
  9. gamepad_button_check
  10. gamepad_button_check_pressed
  11. gamepad_button_check_released
  12. gamepad_button_count
  13. gamepad_button_value
  14. gamepad_set_vibration
  15. gamepad_set_axis_deadzone
  16. gamepad_set_colour

Compatibilité

La liste suivante montre la compatibilité actuelle entre les plates-formes (notez que cela va changer avec les futures mises à jour):

Idéalement, sur toutes les plates-formes cibles, vous souhaitez énumérer une liste des "slots" de gamepad disponibles, puis les vérifier pour voir si des périphériques sont détectés, quelque chose comme ceci:

var maxpads = gamepad_get_device_count();for (var i = 0; i < maxpads; i++)
    {
    if (gamepad_is_connected(i))
        {
        // do stuff with pad "i"
        }
    }