[PyGame] Using joystick module from PyGame - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: Game Development (https://python-forum.io/forum-11.html) +--- Thread: [PyGame] Using joystick module from PyGame (/thread-12990.html) |
Using joystick module from PyGame - archieab - Sep-22-2018 Exact code with commenting can be found here, or here. while done==False: for event in pygame.event.get(): if event.type == pygame.QUIT: done=True if event.type == pygame.JOYBUTTONDOWN: print("Joystick button pressed.") if event.type == pygame.JOYBUTTONUP: print("Joystick button released.") screen.fill(darkgrey) textPrint.reset() joystick_count = pygame.joystick.get_count() textPrint.print(screen, "Number of joysticks: {}".format(joystick_count) ) textPrint.indent() for i in range(joystick_count): joystick = pygame.joystick.Joystick(i) joystick.init() textPrint.print(screen, "Joystick {}".format(i) ) textPrint.indent() name = joystick.get_name() textPrint.print(screen, "Joystick name: {}".format(name) ) axes = joystick.get_numaxes() textPrint.print(screen, "Number of axes: {}".format(axes) ) textPrint.indent() for i in range( axes ): axis = joystick.get_axis( i ) textPrint.print(screen, "Axis {} value: {:>6.0f}".format(i, axis) ) textPrint.unindent() buttons = joystick.get_numbuttons() textPrint.print(screen, "Number of buttons: {}".format(buttons) ) textPrint.indent() for i in range( buttons ): button = joystick.get_button( i ) textPrint.print(screen, "Button {:>2} value: {}".format(i,button) ) textPrint.unindent() hats = joystick.get_numhats() textPrint.print(screen, "Number of hats: {}".format(hats) ) textPrint.indent() for i in range( hats ): hat = joystick.get_hat( i ) textPrint.print(screen, "Hat {} value: {}".format(i, str(hat)) ) textPrint.unindent() pygame.display.flip() clock.tick(20)With the help of the online PyGame documentation, I was able to produce a screen displaying values for individual Joysticks. Sadly, I'm unsure on how I could translate these values to an event that produces something like, "this button is pressed, now do this". RE: Using joystick module from PyGame - Larz60+ - Sep-22-2018 not a pygame expert, but it appears that in the code: if event.type == pygame.JOYBUTTONDOWN: print("Joystick button pressed.") if event.type == pygame.JOYBUTTONUP: print("Joystick button released.")instead of just printing, call a function, for example: if event.type == pygame.JOYBUTTONDOWN: process_button_down_stuff() if event.type == pygame.JOYBUTTONUP: process_button_up_stuff() RE: Using joystick module from PyGame - archieab - Sep-22-2018 (Sep-22-2018, 08:16 PM)Larz60+ Wrote: not a pygame expert, but it appears that in the code: Hi Larz, Thanks for the reply. What you have suggested would work, but isn’t specific to the pos and neg values. Is there a way, maybe here, axes = joystick.get_numaxes() textPrint.print(screen, "Number of axes: {}".format(axes) ) textPrint.indent()Where I could say “If joystick no.1’s axis no.3 is 1, then print ‘hello!’”? Cheers. RE: Using joystick module from PyGame - archieab - Sep-22-2018 Something similar to this, for i in range( axes ): axis = joystick.get_axis( i ) textPrint.print(screen, "Axis {} value: {:>6.0f}".format(i, axis) ) if Joystick 2's Axis 3 is equal to 1: print("Joystick 2 is pointing to the right.") if Joystick 2's Axis 3 is equal to -1: print("Joystick 2 is pointing to the left.") textPrint.unindent() RE: Using joystick module from PyGame - Larz60+ - Sep-23-2018 I'd have to have a setup that I could try to say definitively what would and wouldn't work. Some of the moderators here use pygame and will respond sooner or later. metulburr for one. RE: Using joystick module from PyGame - Windspar - Sep-23-2018 Joystick event example. import pygame pygame.init() def main(): pygame.display.set_caption('JoyStick Example') surface = pygame.display.set_mode((800, 600)) clock = pygame.time.Clock() running = True font = pygame.font.Font(None, 20) linesize = font.get_linesize() joysticks = [pygame.joystick.Joystick(i) for i in range(pygame.joystick.get_count())] for joy in joysticks: joy.init() while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.JOYAXISMOTION: print(event) elif event.type == pygame.JOYHATMOTION: print(event) elif event.type == pygame.JOYBUTTONDOWN: print(event) surface.fill((0,0,0)) pygame.display.flip() clock.tick(20) pygame.quit() main()joystick states example. import pygame pygame.init() def main(): pygame.display.set_caption('JoyStick Example') surface = pygame.display.set_mode((800, 600)) clock = pygame.time.Clock() running = True font = pygame.font.Font(None, 20) linesize = font.get_linesize() joysticks = [pygame.joystick.Joystick(i) for i in range(pygame.joystick.get_count())] print(len(joysticks)) for joy in joysticks: joy.init() while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False surface.fill((0,0,0)) # joystick buttons for j in range(len(joysticks)): for i in range(joysticks[j].get_numbuttons()): if joysticks[j].get_button(i): print("Joystick {}, Button {} pressed".format(j, i)) pygame.display.flip() clock.tick(20) pygame.quit() main() RE: Using joystick module from PyGame - archieab - Sep-25-2018 I'm unsure on how to mark this post as solved, but I managed to work out a solution. |