2017-03-06 7 views
0

こんにちは私は学校プロジェクトにpygameを使用していますが、正しく動作していないようです。私が作るゲームパッドでそれを使用してしようとするすべての まず、それは私に、ジョイスティックの位置を返しますが、私は自分のプログラムgamepadでpygameを使用する際の問題

import pygame 

# Define some colors 
BLACK = ( 0, 0, 0) 
WHITE = (255, 255, 255) 

# This is a simple class that will help us print to the screen 
# It has nothing to do with the joysticks, just outputing the 
# information. 
class TextPrint: 
    def __init__(self): 
     self.reset() 
     self.font = pygame.font.Font(None, 20) 

    def print(self, screen, textString): 
     textBitmap = self.font.render(textString, True, BLACK) 
     screen.blit(textBitmap, [self.x, self.y]) 
     self.y += self.line_height 

    def reset(self): 
     self.x = 10 
     self.y = 10 
     self.line_height = 15 

    def indent(self): 
     self.x += 10 

    def unindent(self): 
     self.x -= 10 


pygame.init() 

# Set the width and height of the screen [width,height] 
size = [500, 700] 
screen = pygame.display.set_mode(size) 

pygame.display.set_caption("My Game") 

#Loop until the user clicks the close button. 
done = False 

# Used to manage how fast the screen updates 
clock = pygame.time.Clock() 

# Initialize the joysticks 
pygame.joystick.init() 

# Get ready to print 
textPrint = TextPrint() 

# -------- Main Program Loop ----------- 
while done==False: 
    # EVENT PROCESSING STEP 
    for event in pygame.event.get(): # User did something 
     if event.type == pygame.QUIT: # If user clicked close 
      done=True # Flag that we are done so we exit this loop 

     # Possible joystick actions: JOYAXISMOTION JOYBALLMOTION JOYBUTTONDOWN JOYBUTTONUP JOYHATMOTION 
     if event.type == pygame.JOYBUTTONDOWN: 
      print("Joystick button pressed.") 
     if event.type == pygame.JOYBUTTONUP: 
      print("Joystick button released.") 


    # DRAWING STEP 
    # First, clear the screen to white. Don't put other drawing commands 
    # above this, or they will be erased with this command. 
    screen.fill(WHITE) 
    textPrint.reset() 

    # Get count of joysticks 
    joystick_count = pygame.joystick.get_count() 

    textPrint.print(screen, "Number of joysticks: {}".format(joystick_count)) 
    textPrint.indent() 

    # For each joystick: 
    for i in range(joystick_count): 
     joystick = pygame.joystick.Joystick(i) 
     joystick.init() 

     textPrint.print(screen, "Joystick {}".format(i)) 
     textPrint.indent() 

     # Get the name from the OS for the controller/joystick 
     name = joystick.get_name() 
     textPrint.print(screen, "Joystick name: {}".format(name)) 

     # Usually axis run in pairs, up/down for one, and left/right for 
     # the other. 
     axes = joystick.get_numaxes() 
     textPrint.print(screen, "Number of axes: {}".format(axes)) 
     textPrint.indent() 

     for i in range(axes): 
      axis = joystick.get_axis(i) 
      textPrint.print(screen, "Axis {} value: {:>6.3f}".format(i, axis)) 
     textPrint.unindent() 

     buttons = joystick.get_numbuttons() 
     textPrint.print(screen, "Number of buttons: {}".format(buttons)) 
     textPrint.indent() 

     for i in range(buttons): 
      button = joystick.get_button(i) 
      textPrint.print(screen, "Button {:>2} value: {}".format(i,button)) 
     textPrint.unindent() 

     # Hat switch. All or nothing for direction, not like joysticks. 
     # Value comes back in an array. 
     hats = joystick.get_numhats() 
     textPrint.print(screen, "Number of hats: {}".format(hats)) 
     textPrint.indent() 

     for i in range(hats): 
      hat = joystick.get_hat(i) 
      textPrint.print(screen, "Hat {} value: {}".format(i, str(hat))) 
     textPrint.unindent() 

     textPrint.unindent() 


    # ALL CODE TO DRAW SHOULD GO ABOVE THIS COMMENT 

    # Go ahead and update the screen with what we've drawn. 
    pygame.display.flip() 

    # Limit to 20 frames per second 
    clock.tick(20) 

# Close the window and quit. 
# If you forget this line, the program will 'hang' 
# on exit if running from IDLE. 
pygame.quit() 

を使用する場合でも、それはゲームパッドを検出したが、私を返さない何もボタン/帽子/ジョイスティックすべての値は0のままです。 キーボードで試しても、デバイスが検出されても、キーを押しても0が返されますpygame.key.get_pressed()

問題は、ほとんどの場合、ゲームパッドを持っていないということです時間は、私は押されているキーを検出するために私のキーボードで試してみましたが、私はどちらも動作しません。通過すると、すべてのジョイスティックにループの一度だけ外を初期化してみ

import pygame 
import time 

pygame.init() 
while True: 
    print(pygame.key.get_pressed()) 
    time.sleep(3) 

しかし、キーが押されたそれは問題ではない値は、それらのすべて

答えて

0

のために0に残っている:私のプログラムでした現在ループ内にあるコードを初期化するコードを削除します。あなたがそれを行うと、何らかの入力バッファがクリアされ、ゼロになった値が得られるかもしれません。しかし、この理論をテストするためのゲームパッドを用意することなく、これは私の推測です。

+0

最終的に私の質問が更新されます。何か変わるかどうかはわかりません。 – Vector

+0

@Vectorあなたのキーボードのサンプルコードは、ループ中にイベントキューをポップすることはないので、 'pygame.key.get_pressed()'は常にキー状態の同じスナップショットを返します。 –

+0

ありがとう、私はpygameでかなり新しくなったので、whileループで 'pygame.event.pump()'を追加するだけです。 – Vector

関連する問題