Urgent! communication entre joystick et DirectInput.

amlil-cs - 14 févr. 2014 à 16:57
 amlil-cs - 19 févr. 2014 à 18:51
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: using UnityEngine;
using System;
using System.Collections;
using System.ComponentModel;
using Microsoft.DirectX;
using Microsoft.DirectX.DirectInput;
//using System.Windows.Forms;

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 reconnaissant.

4 réponses

PS: quel version de directX dois-je utiliser pour Unity3d version: 4.2.2f1?
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 23
19 févr. 2014 à 13:17
Re,

Pour DirectX 9, essayes ceci :

joystick.SetCooperativeLevel(
    this,
    CooperativeLevelFlags.Exclusive); 


bye...
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 23
19 févr. 2014 à 13:23
Une petite info :

"this" doit être un contrôle ou une fenêtre winForm
Si ce n'est pas le cas,
Implémentes une méthode publique
myForm.GetControlContener()
ou une propriété
myForm.ControlContener
dans ta classe de fenêtre, afin de pouvoir passer cette référence à

SetCooperativeLevel(
myForm.GetControlContener(),
CooperativeLevelFlags.Exclusive);

bye...
0
merci yann,
je ferrai ce que tu m'as dit et j'espère que ça va régler le problème avec cette méthode.
0