#python #linux #ubuntu #pygame #virtualbox
Вопрос:
Настройка: Хост Windows 10 с гостем Ubuntu 20.04 внутри VirtualBox
Я недавно переключил виртуальные машины и не понимаю, почему мой код джойстика больше не работает.
У меня есть этот код, который отлично работает в Windows 10, а Ubuntu 20.04 гостевая внутри VMware. Однако в VirtualBox он просто печатает 0 для всех осей и кнопок. Я не думаю, что в виртуальную машину передается какая-либо информация, кроме места в памяти джойстика. После того, как я включу usb на вкладке устройства VirtualBox, в моем /dev джойстик находится под «hidraw1», это нормально?
Код выполняется без ошибок, но он просто печатает 0. У меня есть пакет расширений VirtualBox и работающая веб-камера, поэтому я думаю, что виртуальная машина может получить доступ к USB. Я просто не понимаю, почему не передаются никакие данные. Есть какие-нибудь идеи?
Вот код для справки,
import pygame import math as m WIDTH, HEIGHT = 90, 90 WIN = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.joystick.init() joysticks = [pygame.joystick.Joystick(i) for i in range(pygame.joystick.get_count())] print(joysticks) speed = 0 FPS = 60 con = 3 button_X = 0 button_A = 1 button_B = 2 print("init") def main(): clock = pygame.time.Clock() run = True speed = 0 speed_time = 0.03 while run: clock.tick(FPS) for event in pygame.event.get(): if event.type == pygame.QUIT: run = False x_pos = pygame.joystick.Joystick(con).get_axis(0) y_pos = pygame.joystick.Joystick(con).get_axis(1) B_A = pygame.joystick.Joystick(con).get_button(button_A) B_B = pygame.joystick.Joystick(con).get_button(button_B) B_X = pygame.joystick.Joystick(con).get_button(button_X) #Set speed control if B_A: speed = speed speed_time if speed gt; 1: speed = 1.0 elif B_B: speed = speed - speed_time if speed lt; -1: speed = -1.0 else: if speed gt; 0: speed = speed - speed_time if speed lt; 0: speed = 0 elif speed lt; 0: speed = speed speed_time if speed gt; 0: speed = 0 #Filter signal if B_X: speed = 0 if x_pos lt; 0.2 and x_pos gt; -0.2: x_pos = 0.0 if x_pos gt; 0.75: x_pos = 1 if x_pos lt; -0.75: x_pos = -1 if y_pos lt; 0.2 and y_pos gt; -0.2: y_pos = 0.0 if y_pos gt; 0.75: y_pos = 1 if y_pos lt; -0.75: y_pos = -1 x_float = "{:.2f}".format(x_pos) y_float = "{:.2f}".format(y_pos) speed_value = "{:.2f}".format(speed) angle = m.atan2(y_pos,x_pos) deg = angle * -180/m.pi pos = [x_float, y_float] deg = "{:.2f}".format(deg) print("Angle = ", deg, " Pos = ", pos, " Speed = ", speed_value) pygame.quit() if __name__ == "__main__": main()
Пример Вывода:
pygame 2.0.2 (SDL 2.0.16, Python 3.8.10) Hello from the pygame community. https://www.pygame.org/contribute.html [lt;Joystick object at 0x7ff4dd1893c0gt;, lt;Joystick object at 0x7ff4dd163ba0gt;, lt;Joystick object at 0x7ff4dd24d3f0gt;, lt;Joystick object at 0x7ff4dd24d030gt;] init Angle = -0.00 Pos = ['0.00', '0.00'] Speed = 0.00 Angle = -0.00 Pos = ['0.00', '0.00'] Speed = 0.00 Angle = -0.00 Pos = ['0.00', '0.00'] Speed = 0.00 Angle = -0.00 Pos = ['0.00', '0.00'] Speed = 0.00 Angle = -0.00 Pos = ['0.00', '0.00'] Speed = 0.00 Angle = -0.00 Pos = ['0.00', '0.00'] Speed = 0.00 Angle = -0.00 Pos = ['0.00', '0.00'] Speed = 0.00 Angle = -0.00 Pos = ['0.00', '0.00'] Speed = 0.00 Angle = -0.00 Pos = ['0.00', '0.00'] Speed = 0.00 Angle = -0.00 Pos = ['0.00', '0.00'] Speed = 0.00 Angle = -0.00 Pos = ['0.00', '0.00'] Speed = 0.00 Angle = -0.00 Pos = ['0.00', '0.00'] Speed = 0.00 Angle = -0.00 Pos = ['0.00', '0.00'] Speed = 0.00 Angle = -0.00 Pos = ['0.00', '0.00'] Speed = 0.00 ...
Возвращает все 0, несмотря на перемещение палочек.
Комментарии:
1. Эта проблема связана с вашей системой, но не с вашим кодом. Весь этот код и данные хороши, но это не помогает решить проблему.
2. Спасибо за утешение. Рад, что это не код. Просто пытаюсь выяснить прямо сейчас, блокирует ли его windows или virtualbox данные. Или возможно, что он читает не ту ячейку памяти?