簡體   English   中英

Pygame Xbox One Controller

[英]Pygame Xbox One Controller

我正在嘗試運行一些代碼,允許用戶使用 Xbox Controller 進行控制。我使用 Pygame 將其與 Xbox 360 controller 一起使用。然后當我嘗試使用 Xbox controller 時,它能夠讀取為“已連接”,但它不會讀取實際的按鈕按下。

我嘗試運行在 Pygame 網站上找到的操縱桿分析器,它顯示它再次連接但沒有按鈕輸入。

在此處輸入圖像描述

可以在本文檔頁面的底部找到此代碼: https://www.pygame.org/docs/ref/joystick.html

import pygame


# Define some colors.
BLACK = pygame.Color('black')
WHITE = pygame.Color('white')


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

    def tprint(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).
screen = pygame.display.set_mode((500, 700))

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 not done:
    #
    # EVENT PROCESSING STEP
    #
    # Possible joystick actions: JOYAXISMOTION, JOYBALLMOTION, JOYBUTTONDOWN,
    # JOYBUTTONUP, JOYHATMOTION
    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.
        elif event.type == pygame.JOYBUTTONDOWN:
            print("Joystick button pressed.")
        elif 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.tprint(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()

        try:
            jid = joystick.get_instance_id()
        except AttributeError:
            # get_instance_id() is an SDL2 method
            jid = joystick.get_id()
        textPrint.tprint(screen, "Joystick {}".format(jid))
        textPrint.indent()

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

        try:
            guid = joystick.get_guid()
        except AttributeError:
            # get_guid() is an SDL2 method
            pass
        else:
            textPrint.tprint(screen, "GUID: {}".format(guid))

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

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

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

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

        hats = joystick.get_numhats()
        textPrint.tprint(screen, "Number of hats: {}".format(hats))
        textPrint.indent()

        # Hat position. All or nothing for direction, not a float like
        # get_axis(). Position is a tuple of int values (x, y).
        for i in range(hats):
            hat = joystick.get_hat(i)
            textPrint.tprint(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()

有誰知道這是為什么?

如果您在 Xbox360 控制器上按 Y,那么不同的控制器將分配給不同的按鈕,這將是 Xbox One 上的 B 按,只是由於某種原因有所不同

藍牙可能未啟用,但請嘗試啟用它或檢查控制器電池!

我已經在Xbox One Series 2 Controller上嘗試過相同的腳本,可以確認它可以完美運行。 我使用充電線將 controller 連接到 PC,而不是無線方式(因為我在同一個房間里有一個 Xbox)。

您應該先嘗試相同的操作,然后按住主X按鈕 按鈕,否則請檢查 PC 上的 Xbox 設置並從設備管理器更新驅動程序(有線時)。

另外,請確保您擁有最新的 Pygame 版本,我在 Windows 10 上嘗試使用 2.1.2。希望這能給您提示。

我正在嘗試運行一些代碼,以允許用戶使用Xbox控制器進行控制。 我使用Pygame將其與Xbox 360控制器一起使用。 然后,當我嘗試使用Xbox控制器時,它可以讀取“已連接”,但不能讀取實際的按鈕按下情況。

我嘗試運行在Pygame網站上找到的操縱桿分析器,它顯示它已再次連接,但未進行按鈕輸入。

在此處輸入圖片說明

可以在此文檔頁面的底部找到此代碼: https : //www.pygame.org/docs/ref/joystick.html

有人對這是為什么有任何見識嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM