Сначала убедитесь, что у вас есть джойстик, получив количество джойстиков на pygame.joystick.get_count()
.Инициализируйте джойстик с помощью pygame.joystick.Joystick.init
:
joystick = None
if pygame.joystick.get_count() > 0:
joystick = pygame.joystick.Joystick(0)
joystick.init()
После инициализации джойстика значение оси ist можно получить с помощью pygame.joystick.Joystick.get_axis
.Значение, возвращаемое этой функцией, находится в диапазоне [-1, 1].-1 для максимального отрицательного наклона и +1 для максимального положительного наклона.
Обратите внимание, что каждая аналоговая ручка геймпада или джойстика имеет 2 оси, одну для горизонтального направления и 1 для вертикального направления.Поскольку значение, возвращаемое get_axis()
, зависит от наклона аналогового джойстика, вы должны умножить скорость на значение.
Кроме того, вы должны игнорировать значения около 0 для мертвой точки из-за неточности оборудования,Это можно сделать с помощью простой проверки с использованием встроенной функции abs(x)
например, abs(axisval) > 0.1
:
if joystick:
axis_x, axis_y = (joystick.get_axis(0), joystick.get_axis(1))
if abs(axis_x) > 0.1:
player_one.speed_x = 5 * axis_x
if abs(axis_y) > 0.1:
player_one.speed_y = 5 * axis_y
См. Следующее простое демонстрационное приложение:
import pygame
pygame.init()
size = (800,600)
screen = pygame.display.set_mode(size)
clock = pygame.time.Clock()
pos = [size[0]/2, size[1]/2]
speed = 5
joystick = None
done = False
while not done:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
elif event.type == pygame.KEYDOWN:
if event.key==pygame.K_RETURN:
done = True
if joystick:
axis_x, axis_y = (joystick.get_axis(0), joystick.get_axis(1))
if abs(axis_x) > 0.1:
pos[0] += speed * axis_x
if abs(axis_y) > 0.1:
pos[1] += speed * axis_y
else:
if pygame.joystick.get_count() > 0:
joystick = pygame.joystick.Joystick(0)
joystick.init()
print("joystick initialized")
screen.fill((0, 0, 255))
pygame.draw.rect(screen, (255,255,255), (*pos, 10, 10))
pygame.display.flip()