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?
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'
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.
vBulletin® v3.8.7, Copyright ©2000-2024, vBulletin Solutions, Inc.