12-03-2014 00:24:34
- jonath313
- Membres
- Date d'inscription:
- Messages: 240
- IP: 31.37.221.53
- Courriel
Bonjour,
Pour faire un mode multijoueur j'aimerais utiliser 2 manettes, pour cela j'ai donc pensé récuperer l'id de chaque manette. Mon probleme c'est que je ne vois pas comment faire cela, j'ai lu la doc et j'ai vue que l'on peut récupérer les informations sur les joysticks dont le nombre de joysticks.
Mais je n'ai pas trouvé de methode du genre joystick->getID(). Je sais que par défaut irrlicht attribut la valeur 0 a la manette 1 et 1 à la manette 2.
Mais est-ce que quelqu'un sait comment je pourrais tester si un bouton à été appuyé sur la manette 1 ou la manette 2 ?
J'espère que mon explication est claire :s.
Merci.
Hors ligne
12-03-2014 21:27:13
- Magun
- Administrateurs

- Date d'inscription:
- Messages: 910
- IP: 92.146.106.136
- Courriel Site web
event.JoystickEvent.Joystick correspond a l'id du joystick emetteur
event : SEvent
http://irrlicht.sourceforge.net/docu/structirr_1_1_s_event_1_1_s_joystick_event.html#a04424b44a1c3370263afb3af501cae44
Hors ligne
13-03-2014 15:48:44
- jonath313
- Membres
- Date d'inscription:
- Messages: 240
- IP: 31.37.221.53
- Courriel
Ok merci Magun. Enfait pour savoir si cest la manette 1 ou la deux j'ai juste à faire ce test :
If(event.JoystickEvent.Joystick == 0)Et si c'est l'autre je fait == 1 ?
Par contre j'ai une autre question...
Si il y a 1 joueur ça fait un événement à recevoir mais si il y à deux joueurs comment géré ça car le driver reçoit qun seul type d'événement non?
Hors ligne
14-03-2014 17:56:41
- Magun
- Administrateurs

- Date d'inscription:
- Messages: 910
- IP: 92.146.106.136
- Courriel Site web
Je n'ai pas compris ...
Tes évènements seront toujours émis de façon séquentielle, donc peu importe.
Code c++ :
if(event.JoystickEvent.Joystick == 0)
{
// joueur 1
}
else
{
// joueur 2
}
?
Hors ligne
15-03-2014 07:38:20
- jonath313
- Membres
- Date d'inscription:
- Messages: 240
- IP: 80.215.195.122
- Courriel
En fait je voulais savoir s'il était possible de créer une fonction onevent generique pour chaque joueur pour éviter de copier le code plusieurs fois dans la même fonction. Mais ducoups le problème avec le générique c'est que sa fait avoir 2 fonction on event pour 2 joueurs et donc deux événements a envoyer au driver.
Enfait je pensais que je pouvais gérer les événements comme je te l'ai annoncé au dessus.
Hors ligne
16-03-2014 12:09:17
- Magun
- Administrateurs

- Date d'inscription:
- Messages: 910
- IP: 92.146.106.136
- Courriel Site web
le plus simple c'est d'avoire un array pour t'est deux joueur
de tel sorte que tu n'est cas faire quelque chose du style:
Code c++ :
if(event.JoystickEvent.Joystick > player.size() return;
if(blablabla) player[event.JoystickEvent.Joystick]->forkward(0); // forkward
if(blablabla) player[event.JoystickEvent.Joystick]->forkward(180); // backward
if(blablabla) player[event.JoystickEvent.Joystick]->forkward(90); // strafe rigth
if(blablabla) player[event.JoystickEvent.Joystick]->forkward(-90); // strafe left
if(blablabla) player[event.JoystickEvent.Joystick]->rotate(1); // right
if(blablabla) player[event.JoystickEvent.Joystick]->rotate(-1); // left
avec player = irr::core::array<Player*> (ta class joueur)
ainssi peut import event.JoystickEvent.Joystick le player adequat seras animer
après non tu ne peut pas avoir plusieur evenement simultanement donc, si tu utilise deux OnEvent un seul des deux ne seras effectif
tu peut faire une fonction OnEventPlayer(int player, const irr::SEvent&); que tu appelle dans OnEvent(...) mais tu retombe dans le cas que je t'est expliquer en premier
Hors ligne



