Heres a question, is it possible to use a non 360 for windows controller?
I have a fairly cheap one that i would like to use for game development, but it isn't registered by visual studio.
Also http://code.google.com/p/x360ce/ is an emulator for non 360 controllers by putting the files in the main folder, however it doesn't read in Visual Studio 2010's main folder, would i have to be more specific and put it in the main XNA folder?
Cheers
XNA custom gamepads in Visual Studio
Use SlimDX's direct input library, you access the joystick like so:
[source lang="csharp"]
Joystick joystick;
int joystickButtonCount;
int joystickAxesCount;
JoystickState joystickState, oldJoystickState;
public Game()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
CreateDevice();
}
...
protected override void Update(GameTime gameTime)
{
joystickState = joystick.GetCurrentState();
bool[] buttons = joystickState.GetButtons();
Console.Clear();
Console.WriteLine("Using device: {0}\nButton count: {1}\nAxes count: {2}\n", joystick.Information.ProductName, joystickButtonCount, joystickAxesCount);
for (int i = 0; i < joystickButtonCount; i++)
{
Console.WriteLine("{0}: {1}", i + 1, buttons);
}
}
void CreateDevice()
{
DirectInput dinput = new DirectInput();
foreach (DeviceInstance device in dinput.GetDevices(DeviceClass.GameController, DeviceEnumerationFlags.AttachedOnly))
{
try
{
joystick = new Joystick(dinput, device.InstanceGuid);
joystickAxesCount = joystick.Capabilities.AxesCount;
joystickButtonCount = joystick.Capabilities.ButtonCount;
break;
}
catch
{
}
}
if (joystick == null)
{
Console.WriteLine("No devices");
return; ;
}
joystick.Acquire();
foreach (DeviceObjectInstance deviceObject in joystick.GetObjects())
{
if ((deviceObject.ObjectType & ObjectDeviceType.Axis) != 0)
joystick.GetObjectPropertiesById((int)deviceObject.ObjectType).SetRange(-1000, 1000);
}
}
[/source]
Getting your axis information is a little different, if you do joystickState{dot} intellisense will show you a lot of properties, the ones with X, Y and Z on the end will give you your axis info, so to find out which one your joystick uses you'll have to print them all the console and see.
EDIT:
These two lines:
joystickAxesCount = joystick.Capabilities.AxesCount;
joystickButtonCount = joystick.Capabilities.ButtonCount;
may cause you to hang for a few seconds, so you may want to create your device on a seperate thread so your main game loop won't stall until it responds. You could also cut this out entirely and loop over the entire bool[] buttons array which I think is of size 128.
[source lang="csharp"]
Joystick joystick;
int joystickButtonCount;
int joystickAxesCount;
JoystickState joystickState, oldJoystickState;
public Game()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
CreateDevice();
}
...
protected override void Update(GameTime gameTime)
{
joystickState = joystick.GetCurrentState();
bool[] buttons = joystickState.GetButtons();
Console.Clear();
Console.WriteLine("Using device: {0}\nButton count: {1}\nAxes count: {2}\n", joystick.Information.ProductName, joystickButtonCount, joystickAxesCount);
for (int i = 0; i < joystickButtonCount; i++)
{
Console.WriteLine("{0}: {1}", i + 1, buttons);
}
}
void CreateDevice()
{
DirectInput dinput = new DirectInput();
foreach (DeviceInstance device in dinput.GetDevices(DeviceClass.GameController, DeviceEnumerationFlags.AttachedOnly))
{
try
{
joystick = new Joystick(dinput, device.InstanceGuid);
joystickAxesCount = joystick.Capabilities.AxesCount;
joystickButtonCount = joystick.Capabilities.ButtonCount;
break;
}
catch
{
}
}
if (joystick == null)
{
Console.WriteLine("No devices");
return; ;
}
joystick.Acquire();
foreach (DeviceObjectInstance deviceObject in joystick.GetObjects())
{
if ((deviceObject.ObjectType & ObjectDeviceType.Axis) != 0)
joystick.GetObjectPropertiesById((int)deviceObject.ObjectType).SetRange(-1000, 1000);
}
}
[/source]
Getting your axis information is a little different, if you do joystickState{dot} intellisense will show you a lot of properties, the ones with X, Y and Z on the end will give you your axis info, so to find out which one your joystick uses you'll have to print them all the console and see.
EDIT:
These two lines:
joystickAxesCount = joystick.Capabilities.AxesCount;
joystickButtonCount = joystick.Capabilities.ButtonCount;
may cause you to hang for a few seconds, so you may want to create your device on a seperate thread so your main game loop won't stall until it responds. You could also cut this out entirely and loop over the entire bool[] buttons array which I think is of size 128.
Also http://code.google.com/p/x360ce/ is an emulator for non 360 controllers by putting the files in the main folder, however it doesn't read in Visual Studio 2010's main folder, would i have to be more specific and put it in the main XNA folder?
This isn't really a visual studio issue, the program is for standalone applications that have already been compiled.
http://code.google.c...e/wiki/MainPage
Compile your game then dependant on whether you compiled in debug or release mode go to:
My Documents>Visual Studio 2010> Projects>[project name]>[project name]>bin>[either debug or release]
That is your games folder that you install x360ce in. You may have to manually copy you xinput.dll file which should be in program files on your hard drive somewhere.
I tried that program out, found I had about half a second delay on inputs whereas by actual 360 pad runs fine.
As for the actual 360 gamepads, its well worth buying one. £20 for a wired USB gamepad with the functionality and quality to match gamepads costing far more. Just can't really argue with it.
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement