2017-06-19 25 views
1

私は、PS4コントローラを接続して、画面の周りを特定のボールを動かそうとしています。コントローラに接続して、左のアナログスティックを動かすときに異なる値を返すことができます。あたかも画面を更新する必要があるような気がしますか?私はそれを理解するのに困っている。Pygameジョイスティックコントロール - 画面が更新されていませんか?

おかげ例えば、あなたがballrect変数に割り当てる必要があり、新たな矩形を返しRect.move

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() 

答えて

0

を:ここで

は、私が持っているものです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 
+0

私は値が '場合x_axis_pos> 0.5またはx_axis_pos <-.5にない場合は、0に速度を設定する必要があることを言及するのを忘れてしまった:'範囲。 2つの 'else'節を追加するだけです。 – skrx

+0

ありがとう、それはうまくいった!それは有り難いです。 –

関連する問題