Pygame Joystick Control - Экран не обновляется?

Я пытаюсь просто переместить данный шар по экрану с подключенным контроллером PS4. Я могу подключить контроллер и вернуть ему разные значения при перемещении левой аналоговой флешки. Мне кажется, что экран просто нужно обновить? У меня проблемы с выяснением.

Вот что у меня есть:

Спасибо

import pygame

def main():

     pygame.init()

     size = width, height = 800, 800
     black = 0, 0, 0
     speed = [5,5]

     screen = pygame.display.set_mode(size)
     ball = pygame.image.load("ball1.jpg")
     ballrect = ball.get_rect()

     pygame.joystick.init()
     joysticks = [pygame.joystick.Joystick(x) for x in 
 range(pygame.joystick.get_count())]

     for joystick in joysticks:
         joystick.init()

     controller = joysticks[0]

     while True:

         for event in pygame.event.get():
             if event.type == pygame.QUIT: sys.exit()

         ballrect.move(speed)
         if controller.get_axis(0) < -.5:
             speed[0] = -speed[0]

         if controller.get_axis(0) > .5:
             speed[0] = speed[0]

         if controller.get_axis(1) < -.5:
             speed[1] = speed[1]

         if controller.get_axis(1) > .5:
             speed[1] = -speed[1]

         screen.fill(black)
         screen.blit(ball, ballrect)
         pygame.display.flip()

1 ответ

Решение

Rect.move возвращает новый прямоугольник, который вы должны назначить ballrect переменная, например ballrect = ballrect.move(speed), Или использовать ballrect.move_ip(speed) который изменяет существующий прямоугольник на месте без создания нового прямоугольника.

Код контроллера, похоже, тоже не работает. Попробуйте сделать что-то вроде этого:

# x and y axis positions of the stick (between -1.0 and 1.0).
x_axis_pos = controller.get_axis(0)
y_axis_pos = controller.get_axis(1)
# Set the speed to a multiple of the axis positions.
if x_axis_pos > .5 or x_axis_pos < -.5:
    speed[0] = int(x_axis_pos * 5)
else:
    speed[0] = 0
if y_axis_pos > .5 or y_axis_pos < -.5:
    speed[1] = int(y_axis_pos * 5)
else:
    speed[1] = 0
Другие вопросы по тегам