PDA

View Full Version : Joystick and XBox Controller in DirectInput?


shivanangel
03-16-2015, 10:31 AM
I am using your example in the Joystick basics to connect to an XBox controller through the new directInput module.

When I call addJoystick(), I get an JoystickSensor, which does not let me call the <xbox>.getControllerID() method.

Do I typecast this to some type? Do I need to use a different method to get access to the actual Xbox methods?

There is nothing in the documentation, so could you please add it in the future? I already printed out the information on the device and it returns true for the isXboxController.

Also, could you please consider changing <xbox>.getControllerID to <xbox>getControllerId to follow capitalization convention better?

Thanks,
George

shivanangel
03-16-2015, 11:20 AM
Also, the button codes appear to be wrong.
I get different codes from the sensor down than what the documentation states:

dinput.XBOX_BUTTON_START reads as a 4, while the left shoulder button reads as a 4 and the start button reads as a 7.

farshizzo
03-16-2015, 11:34 AM
Yeah, the documentation is not very clear. You actually need to use the <dinput>.getXboxControllerList() to get a list of Xbox controller objects that provide the additional methods. They are different than the standard joystick objects created through <dinput>.addJoystick().

Here is a sample script that gets all the detected Xbox controllers and displays a config window for them:
import viz
import vizconfig
viz.go()

dinput = viz.add('DirectInput.dle')

for sensor in dinput.getXboxControllerList():
vizconfig.register(sensor)

vizconfig.getConfigWindow().setWindowVisible(True)

shivanangel
03-16-2015, 12:04 PM
Great, that also fixed the button mapping problem.

~George

shivanangel
03-16-2015, 01:58 PM
What about the analog sticks for the callbacks?
Has that been phased out and now I just use a timer to read the values?

Before there was a move and a twist method.

shivanangel
03-17-2015, 09:58 AM
Also, what about the dead zone?
Doesn't seem to have an effect when set on the XBox controller.
If I poll the device using the getLeftStick() I still get a value less than the dead zone.

Do I have to manually test for this?

Jeff
03-18-2015, 06:53 AM
You could register a callback function with vizact.onupdate to poll the analog values.

Make sure to calibrate your joystick using the Game Controllers dialog in the Windows Control Panel.

Xombie
04-17-2015, 02:31 PM
Is my 'DirectInput.dle' out of date? Why do I get this error?

AttributeError: 'DirectInputExtension' object has no attribute 'getXboxControllerList'

Jeff
04-17-2015, 03:25 PM
This command is available in Vizard 5.1. If you're using Vizard 5 you can go to 'Help > Check for Updates' to get the latest installer.