IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Communication entre un joystick et DirectInput


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2014
    Messages : 26
    Par défaut Communication entre un joystick et DirectInput
    Bonjour,
    je suis vraiment dans l'urgence puisque mon projet doit être soutenu le vendredi 21 février. pour le moment je n'arrive pas à me débloquer de mon problème qui consiste à intégrer un joystick sidewinder force feedback II dans unity3d (mono). j'ai deux erreurs de programmation qui sont:
    - la façon avec laquel je dois utiliser la méthode: SetCooperativeLevel à la ligne 36 et qui renvoie l'erreur suivante: Aucune surcharge pour la méthode 'SetCooperativeLevel' ne prend d'arguments '1' (CS1501).
    - le problème de version ou la façon d'utiliser les listes dans unity3d et qui également renvoie cette erreur: Internal compiler error. See the console log for more information. output was:
    Unhandled Exception: Mono.CSharp.InternalErrorException: Assets/Movement.cs(14,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.

    le programme est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    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()
        { 
            foreach (DeviceInstance di in Manager.GetDevices(DeviceClass.GameControl, EnumDevicesFlags.AttachedOnly))
            {
               joystick = new Device(di.InstanceGuid);
    	       break;
            }
    		if (joystick==null)
    		{
    			throw new Exception("Aucun joystick branché");
    		}
     
            foreach (DeviceObjectInstance doi in joystick.Objects)
            {
               if ((doi.ObjectId & (int)DeviceObjectTypeFlags.Axis) != 0)
                  {
                    joystick.Properties.SetRange(ParameterHow.ById,doi.ObjectId,new InputRange(-50, 50));
                  }
            } 
     
            joystick.Properties.AxisModeAbsolute = true;
    		//joystick.SetDataFormat (DeviceDataFormat.Joystick);
         //joystick.SetCooperativeLevel(CooperativeLevelFlags.Exclusive); 
    		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);
        }
    }

    je solliciter votre aide et je serais très reconnaissante pour toute suggestion qui peut me guider.

  2. #2
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Par défaut
    Bonjour.

    Je ne suis pas certain mais :
    using Microsoft.DirectX; et using Microsoft.DirectX.DirectInput;
    sont obsolètes depuis longtemps.

    Je suppose que le problème vient de là, et il me semble qu'il n'y a pas de solutions...

    Par contre il est possible que sous Windows XP cela fonctionne.

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Bonjour,

    Citation Envoyé par amlil-cs Voir le message
    - la façon avec laquel je dois utiliser la méthode: SetCooperativeLevel à la ligne 36 et qui renvoie l'erreur suivante: Aucune surcharge pour la méthode 'SetCooperativeLevel' ne prend d'arguments '1' (CS1501).
    Peut-être une piste
    Il y a longtemps j'avais utilisé directX 7 avec vb6, si directinput fonctionne comme directdraw, le premier paramètre est le handle de la fenêtre, le deuxième le niveau coopératif
    Ma vielle doc indique comme niveau DISCL_EXCLUSIVE | DISC_BACKGROUND manette de jeu et retour de force.

    [Edit]le message de moldavi est arrivé pendant que je saisisais le mien, effectivement j'étais sous XP. J'avais testé sous vista cela fonctionnait. (par contre je n'utilisais pas le joystic, c'est pour cela que je parle de piste)
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2014
    Messages : 26
    Par défaut
    merci mes amis,
    tellement je suis nulle en programmation j'ai peur que ça va être dure vraiment pour moi.
    donc, si microsoft.directx et microsoft.directx.directinput sont obsolètes, je dois utiliser quoi à la place?
    pour mon cas, j'utilise directX 9 sdk, donc la méthode SetCooperativeLevel a deux paramètres, un Control et un mode de coopération, mais je ne sais pas quoi écrire entre les parenthèses de la méthode. on peut tout simplement supprimer cette ligne de commande?
    sos
    merci.

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Pour connaître le handle de la fenêtre, avec l'API (il y a peut être d'autres solutions)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            [System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)]
            static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
    Utilisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    joystick.SetCooperativeLevel(FindWindow(null,"nom de la fenetre"),CooperativeLevelFlags.Exclusive); // ou CooperativeLevelFlags.Exclusive doit correspondre à DISCL_EXCLUSIVE
    A tester.
    Pour info source : doc c et directx 5.2 ; sur celle avec vb et directX 8 pas d'info.
    Sinon après je ne sais pas.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2014
    Messages : 26
    Par défaut
    merci beaucoup mes amis surtout vous Hervé, je viens d’éliminer la première erreur comme ça:
    joystick.SetCooperativeLevel(null ,CooperativeLevelFlags.Exclusive);
    j'étais contrainte aussi d'ajouter la référence suivante:
    using System.Windows.Forms;
    .
    unity me renvoie trois erreurs, qui sont:

    -Assets/Movement.cs(5,17): error CS0234: The type or namespace name `DirectX' does not exist in the namespace `Microsoft'. Are you missing an assembly reference?

    pour
    Microsoft.DirectX.DirectInput;

    -Assets/Movement.cs(6,17): error CS0234: The type or namespace name `DirectX' does not exist in the namespace `Microsoft'. Are you missing an assembly reference?

    pour
    Microsoft.DirectX;

    -Assets/Movement.cs(7,14): error CS0234: The type or namespace name `Windows' does not exist in the namespace `System'. Are you missing an assembly reference?


    pour
    System.Windows.Forms;

    à vrai dire, elles sont toutes dû au même problème.

    merci d'avance,

  7. #7
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Tu les as ajoutées dans les références ?
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

Discussions similaires

  1. communication entre deux executables
    Par semenzato dans le forum MFC
    Réponses: 8
    Dernier message: 13/04/2005, 22h19
  2. Lecture standard et communication entre processus!
    Par Tartar Ukid dans le forum C++Builder
    Réponses: 5
    Dernier message: 05/07/2003, 16h37
  3. Communication entre processus
    Par markopolo dans le forum C++Builder
    Réponses: 2
    Dernier message: 26/06/2003, 16h21
  4. Réponses: 5
    Dernier message: 25/03/2003, 19h43
  5. communication entre programmes
    Par jérôme dans le forum C
    Réponses: 12
    Dernier message: 16/04/2002, 08h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo