Navigation

Tutoriel précédent : Entrées utilisateur - première partie   Sommaire    

II. Introduction

Dans cette seconde partie du tutoriel sur les entrées utilisateur, nous allons apprendre à gérer les entrées utilisateur d'un périphérique mobile. Nous allons voir :

  • la configuration du plugin RemoteInput dans vForge ;
  • la connexion avec un périphérique Android ;
  • la gestion du touché ;
  • la gestion de l'accélération.

Ce tutoriel est assez court, car une fois que vous avez RemoteInput fonctionnel, le reste est proche de ce que nous avons déjà exploré, comme vous allez le voir.

Un point majeur lorsque l'on travaille avec un périphérique mobile est l'émulation du touché et des accéléromètres sur le PC. Heureusement, Project Anarchy offre une bonne solution : RemoteInput.

III. RemoteInput

RemoteInput vous permet d'utiliser un périphérique Android pour contrôler votre jeu dans vForge. Cela peut apporter un gain de temps énorme, car vous n'avez pas à déployer votre application sur le périphérique pour utiliser les contrôles.

Premièrement, vous devez activer le plugin. Pour l'activer, sélectionnez dans vForge : Moteur (« Engine ») → Paramètres du Manifest (« Manifest Settings »).

Image non disponible

Puis, sélectionnez l'onglet « Plugins moteur » (« Engine Plugins ») :

Image non disponible

Ensuite, cliquez sur « Ajouter Plugin » (« Add Plugin ») :

Image non disponible

Et localisez le plugin vRemoteInput. Pour moi, il se trouvait dans C:\Havok\AnarchySDK\Bin\win32_vs2010_anarchy\dev_dll\DX9.

Image non disponible

Une boite vous demandera de recharger votre projet, faites-le.

Ensuite, vous devez ajouter un petit morceau de code dans votre projet :

 
Sélectionnez
G.useRemoteInput = true 

function OnAfterSceneLoaded(self) 
  if G.useRemoteInput then 
    RemoteInput:StartServer('RemoteGui') 
    RemoteInput:InitEmulatedDevices() 
  end 
end

Ce code doit être appelé avant toute gestion d'entrées utilisateur. J'ai choisi OnAfterSceneLoaded(), mais il y a d'autres options possibles et fonctionnelles. Il est important de remarquer la variable globale, G.useRemoteInput, que vous devez définir à true si vous souhaitez utiliser le plugin RemoteInput. Ensuite, nous démarrons le serveur avec un appel à StartServer() en lui passant (arbitrairement) une chaîne de caractères d'identification. Puis nous initialisons les périphériques avec InitEmulatedDevices() qui, pour être honnête, je ne vois pas pourquoi vous reportez cette fonction, pourquoi ne pas la mettre dans StartServer ? Peu importe… vous devez appeler cette fonction d'initialisation et vous êtes prêt à utiliser RemoteInput.

La prochaine fois que vous exécuterez votre application avec ce nouveau morceau de code, vous verrez :

Image non disponible

Maintenant, sur votre périphérique Android, ouvrez le navigateur web et entrez l'URL affichée en haut de votre application. Une fois la page chargée, vous pouvez toucher l'écran et l'information sera envoyée à vForge comme une entrée utilisateur locale. Les données de mouvement sont aussi envoyées, vous permettant d'utiliser l'accéléromètre et le multicontact sans avoir à déployer l'application sur le périphérique. Si vous changez l'orientation du périphérique, cela met à jour vForge.

Les coordonnées retournées par RemoteInput sont relatives à la taille de la fenêtre sur l'écran et ne sont pas celles du périphérique.

Il y a quelques points à connaître. Premièrement, votre ordinateur et périphérique mobile doivent tous les deux être sur le même réseau local… donc, doivent par exemple être connectés au même réseau sans fil. Ensuite, cela ne nécessite pas une grande vitesse, mais si je me connecte à un réseau Wi-Fi public fait de bric et de broc… sur un réseau lent, c'est pratiquement inutile. De plus, vous devrez recharger la page pour rétablir la connexion. Finalement, le navigateur peut ne pas supporter les données de mouvement, par exemple, le navigateur de base de mon HTC One fonctionne parfaitement, mais pas le navigateur Chrome.

IV. Gestion des entrées utilisateur sur mobile avec Lua

Maintenant nous allons voir comment gérer le touché et les mouvements. Le code est pratiquement identique au code de gestion des entrées utilisateur du tutoriel précédent donc, nous n'allons pas l'analyser en détail.

Gestion du touché :

 
Sélectionnez
-- dans la fonction, vous créez la table de correspondance des entrées :
local w, h = Screen:GetViewportSize() 

self.map:MapTrigger("X", {0, 0, w, h}, "CT_TOUCH_ABS_X") 
self.map:MapTrigger("Y", {0, 0, w, h}, "CT_TOUCH_ABS_Y") 

-- dans la fonction  vous gérez les entrées :
local x = self.map:GetTrigger("X") 
local y = self.map:GetTrigger("Y") 
-- Affiche la position du touché sur l'écran
Debug:PrintLine(x .. "," .. y)

Ce code s'inspire de deux sections : la partie d'initialisation (probablement où vous initialisez RemoteServer) où vous définissez votre table de correspondance des entrées et la fonction où vous gérez les entrées utilisateur, comme OnThink(). Il affiche simplement les coordonnées du touché sur l'écran. Vous pouvez gérer le multicontact avec CT_TOUCH_POINT_[[N]]_X/Y/Z, où [[N]] est un index commençant par 0 des contacts. Par exemple, CT_TOUCH_POINT_3_X, vous donnerez la coordonnée en X du quatrième contact, s'il y en a un.

Gestion de l'accélération :

 
Sélectionnez
-- dans la fonction  vous créez la table de correspondance des entrées utilisateur :
self.map:MapTrigger("MotionX", "MOTION", "CT_MOTION_ACCELERATION_X") 
self.map:MapTrigger("MotionY", "MOTION", "CT_MOTION_ACCELERATION_Y") 
self.map:MapTrigger("MotionZ", "MOTION", "CT_MOTION_ACCELERATION_Z") 

-- dans la fonction  les entrées utilisateur sont gérés :
local motionX = self.map:GetTrigger("MotionX") 
local motionY = self.map:GetTrigger("MotionY") 
local motionZ = self.map:GetTrigger("MotionZ") 

Debug:PrintLine(motionX .. "," .. motionY .. "," .. motionZ)

Comme vous pouvez le voir, le mouvement et le touché sont gérés presque de la même façon que les autres formes d'entrées. La valeur retournée par les valeurs de MOTION correspond au mouvement sur l'axe donné et le signe indique la direction du mouvement.

V. Remerciements

Cet article est une traduction autorisée de l'article paru sur Game From Scratch. Je remercie chaleureusement Mike de nous avoir permis de le traduire.

Merci à ClaudeLELOUP pour sa relecture orthographique.

Navigation

Tutoriel précédent : Entrées utilisateur - première partie   Sommaire