[Renommé] Communication entre joystick et DirectInput

amlil-cs Messages postés 7 Date d'inscription jeudi 16 janvier 2014 Statut Membre Dernière intervention 7 avril 2014 - Modifié par Whismeril le 26/01/2014 à 21:27
amlil-cs Messages postés 7 Date d'inscription jeudi 16 janvier 2014 Statut Membre Dernière intervention 7 avril 2014 - 2 févr. 2014 à 16:33
Bonjour,
je suis entrain d'écrire un programme en C# pour avoir accès aux données de joystick sidewinder force feedback II pour faire bouger un objet en conséquence dans unity3d. Ce que me bloque pour le moment est la manière avec laquelle je dois utiliser DirectInput pour récupérer les deux axes X et Y du joystick. je voulais écrire une classe ""Joystick" mais je ne sais pas quels objets je dois utiliser. Quelqu'un veut m'aider? ça serra gentil et je vous remercie d'avance.

8 réponses

Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
26 janv. 2014 à 21:27
Bonsoir, pas très explicite comme titre:
sollicite d'aide pour me débloquer dans mon projet
, je renomme.
0
amlil-cs Messages postés 7 Date d'inscription jeudi 16 janvier 2014 Statut Membre Dernière intervention 7 avril 2014
26 janv. 2014 à 21:30
oki merci Whismeril.
0
amlil-cs Messages postés 7 Date d'inscription jeudi 16 janvier 2014 Statut Membre Dernière intervention 7 avril 2014
27 janv. 2014 à 16:05
y a pas de solutions?
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
27 janv. 2014 à 17:49
C'est que ton problème n'est pas courant.
Il faut donc qu'un bénévole qui connait le sujet, passe par là, voit ton poste etc....;

Patience.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
27 janv. 2014 à 19:42
Salut,

exemple simple et complet ici :
http://msdn.microsoft.com/en-us/library/windows/desktop/bb153252(v=vs.85).aspx

Force feedback ici :
http://msdn.microsoft.com/en-us/library/windows/desktop/bb153254(v=vs.85).aspx

// A énumérer
Device joystick = new Device(
    Manager.GetDevices(
            DeviceClass.GameControl,
            EnumDevicesFlags.AttachedOnly));

joystick.Acquire();

JoystickState state = joystick.CurrentJoystickState;

//Capture Position
state.X
state.Y
state.Z

//Capture Buttons.
byte[] buttons = state.GetButtons();
for(int i = 0; i < buttons.Length; i++)
{

}


bye...
0
amlil-cs Messages postés 7 Date d'inscription jeudi 16 janvier 2014 Statut Membre Dernière intervention 7 avril 2014
Modifié par amlil-cs le 29/01/2014 à 00:18
Merci Yann,
avec ce que vous m'avez donné j'ai pu écrire ce programme qui récupère les cordonnées X et Y, le souci ce que Unity3d m'envoie un drôle message d'erreur qui est le suivant: Internal compiler error. See the console log for more information. output was:
Unhandled Exception: Mono.CSharp.InternalErrorException: Assets/Movement.cs(13,12): Movement.Movement() ---> System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.VisualC, Version=7.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies.
je n'arrive pas à trouver la source du problème.

using UnityEngine;
using System;
using System.Collections;
using System.ComponentModel;
using Microsoft.DirectX;
using Microsoft.DirectX.DirectInput;

public class Movement : MonoBehaviour
{
private Device joystick;
public float MoveDirectVitesse;
public float GaucheDroiteVitesse;
public Movement()
{
Device joystick=null;
foreach (DeviceInstance di in Manager.GetDevices(DeviceClass.GameControl, EnumDevicesFlags.AttachedOnly))
{
joystick = new Device(di.InstanceGuid);
break;
}

foreach (DeviceObjectInstance doi in joystick.Objects)
{
if ((doi.ObjectId & (int)DeviceObjectTypeFlags.Axis) != 0)
{
joystick.Properties.SetRange(ParameterHow.ById,doi.ObjectId,new InputRange(-5000, 5000));
}
}
joystick.Properties.AxisModeAbsolute = true;
joystick.SetCooperativeLevel( CooperativeLevelFlags.NonExclusive | CooperativeLevelFlags.Background);
joystick.Acquire();
JoystickState state = joystick.CurrentJoystickState;
MoveDirectVitesse=state.X;
GaucheDroiteVitesse=state.Y;

}




void Start()
{
}
// Update is called once per frame

void Update ()
{

// Amount to Move
float direct = Input.GetAxis("Vertical") * MoveDirectVitesse * Time.deltaTime;
float gauchedroite = Input.GetAxis("Horizontal") * GaucheDroiteVitesse * Time.deltaTime;


// Move the player
transform.Translate(UnityEngine.Vector3.back * direct);
transform.Translate(UnityEngine.Vector3.left* gauchedroite);

}
}




pareil dans la ligne 30, le compilateur m'envoie ce message d'erreur lequel m'a pris des heures sans arriver à une solution: c:\Users\lenovo\Documents\New Unity Project 5\Assets\Movement.cs(9,9): Error CS1501: Aucune surcharge pour la méthode 'SetCooperativeLevel' ne prend d'arguments '1' (CS1501) (Assembly-CSharp).

je serais éternellement reconnaissant pour toute aide de votre part.
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
29 janv. 2014 à 13:28
Salut,

Ca sent le problème de version ou de collision d'assembly !
(seci dit je ne connais pas Mono)

Concernant la deuxième erreur, les prototypes de ma version (directX 9) sont :

public void SetCooperativeLevel(Control, CooperativeLevelFlags);
ou
public void SetCooperativeLevel(IntPtr, CooperativeLevelFlags);

j'ai pas de prototype à 1 seul paramètre comme toi !
public void SetCooperativeLevel(CooperativeLevelFlags);

Que dit l'intellisence quant tu ouvre la parenthèse de la méthode ?

Accessoirement, quel est le directX SDK que tu utilises ?

bye..
0
amlil-cs Messages postés 7 Date d'inscription jeudi 16 janvier 2014 Statut Membre Dernière intervention 7 avril 2014
2 févr. 2014 à 16:33
merci Yann,
il parais que j'ai fait une bourde moi en copiant collant directement cette méthode. moi aussi, j'ai directX 9.0 sdk mais franchement je ne sais même pas est-ce que mon programme n'aura pas de problèmes si je la supprime directement? si c'est le cas, comment je peux utiliser cette méthode?
voilà ce que ce que cette méthode me propose en ouvrant la parenthèse:
1 of 2: void SetCooperativeLevel(IntPtr hwnd, CooperativeLevelFlags flags)

pour la première erreur, je pense qu'elle est dû à l'utilisation de liste des numérateurs sous unity3d. je pense qu'il y a un souci au niveau de la syntaxe.



merci d'avance pour toute aide.
0
Rejoignez-nous