2017-03-06 84 views
0

嗨,我为一个学校项目使用pygame,但它似乎无法正常工作。 首先我尝试用手柄使用它,使它回到我操纵杆位置,但即使当我使用自己的程序用游戏板使用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你的键盘示例代码不会工作,因为你从来不会在while循环中抽取事件队列,所以'pygame.key.get_pressed()'将始终返回关键状态的相同快照。 –

+0

好的,谢谢我对pygame很新,所以我只需要在while循环中添加'pygame.event.pump()'? – Vector