74 lines
2.0 KiB
Python
74 lines
2.0 KiB
Python
import sys
|
|
import pygame
|
|
|
|
pygame.init()
|
|
|
|
# Create a clock (for framerating)
|
|
clk = pygame.time.Clock()
|
|
|
|
# Grab joystick 0
|
|
if pygame.joystick.get_count() == 0:
|
|
raise IOError("No joystick detected")
|
|
joy = pygame.joystick.Joystick(0)
|
|
joy.init()
|
|
|
|
# Create display
|
|
size = width, height = 600, 600
|
|
screen = pygame.display.set_mode(size)
|
|
pygame.display.set_caption("Joystick Tester")
|
|
|
|
# Frame XHair zone
|
|
frameRect = pygame.Rect((45, 45), (510, 510))
|
|
|
|
# Generate crosshair
|
|
crosshair = pygame.surface.Surface((10, 10))
|
|
crosshair.fill(pygame.Color("magenta"))
|
|
pygame.draw.circle(crosshair, pygame.Color("blue"), (5,5), 5, 0)
|
|
crosshair.set_colorkey(pygame.Color("magenta"), pygame.RLEACCEL)
|
|
crosshair = crosshair.convert()
|
|
|
|
# Generate button surfaces
|
|
writer = pygame.font.Font(pygame.font.get_default_font(), 15)
|
|
buttons = {}
|
|
for b in range(joy.get_numbuttons()):
|
|
buttons[b] = [
|
|
writer.render(
|
|
hex(b)[2:].upper(),
|
|
1,
|
|
pygame.Color("red"),
|
|
pygame.Color("black")
|
|
).convert(),
|
|
# Get co-ords: ((width*slot)+offset, offset). Offsets chosen
|
|
# to match frames.
|
|
((15*b)+45, 560)
|
|
]
|
|
|
|
while True:
|
|
# Pump and check the events queue
|
|
pygame.event.pump()
|
|
for events in pygame.event.get():
|
|
if events.type == pygame.QUIT:
|
|
pygame.quit()
|
|
sys.exit()
|
|
|
|
# Black the screen
|
|
screen.fill(pygame.Color("black"))
|
|
|
|
# Get joystick axes
|
|
x = joy.get_axis(0)
|
|
y = joy.get_axis(1)
|
|
|
|
# Blit to the needed coords:
|
|
# x*amplitude+(centre offset (window size/2))-(xhair offset (xh size/2))
|
|
screen.blit(crosshair, ((x*250)+300-5, (y*250)+300-5))
|
|
pygame.draw.rect(screen, pygame.Color("red"), frameRect, 1)
|
|
|
|
# Get and display the joystick buttons
|
|
for b in range(joy.get_numbuttons()):
|
|
if joy.get_button(b):
|
|
screen.blit(buttons[b][0], buttons[b][1])
|
|
|
|
# Write the display
|
|
pygame.display.flip()
|
|
clk.tick(40) # Limit to <=40 FPS
|