在Mac上,Pygame窗口无法接收键盘事件

3

我正在运行一个非常简单的Pygame教程:

https://www.youtube.com/watch?v=xh4SV3kF-zk

我无法让游戏窗口识别键盘事件。我已经阅读了很多类似的问题,但对于Mac来说,答案似乎都不正确。

我正在使用miniconda,可能需要退出虚拟环境?但我不知道如何做。或者可能需要将焦点设置为我的窗口-但我也不知道如何做。这一定是在运行El Capitan的Mac上很多人都遇到的问题。我的Mac太旧了,无法升级到Sierra。是否有一种方法可以使键盘输入正常工作?

import pygame

pygame.init()

display_width = 1200
display_height = 800

black = (0, 0, 0)
white = (255, 255, 255)
red = (255, 0, 0)
green = (0, 255, 0)
blue = (0, 0, 255)


gameDisplay = pygame.display.set_mode((display_width, display_height))
pygame.display.set_caption('A Bit Racey')
clock = pygame.time.Clock()

speederImg = pygame.image.load('speeder.png')

def speeder(x, y):
    gameDisplay.blit(speederImg, (x, y))

x = (display_width * 0.4)
y = (display_height * 0.2)

x_change = 0

crashed = False

while not crashed:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            crashed = True

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                x_change = -5
            elif event.key == pygame.K_RIGHT:
                x_change = 5

        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                x_change = 0

    x += x_change

    gameDisplay.fill(white)
    speeder(x, y)
        # print(event)


    pygame.display.update()

    clock.tick(60)

pygame.quit()
quit()

请注意,当您在控制台/终端中运行时,应该是 K_RIGHTK_LEFT,而不是 K-RIGHTK-LEFT。您可以在官方文档中查看其他键常量 - furas
重新观看视频 - 您会看到 K_LEFT,而不是 K-LEFT - 视频中的时刻 - furas
1
这是一个好观点,但我的问题并没有解决。当我从终端启动时,我可以在终端中看到键盘输入,但我的精灵并没有移动。 - Davtho1983
如果您首先单击pygame窗口会发生什么?还是没有反应吗?我不使用Mac,所以无法提供更多帮助。 - furas
在疯狂地搜索后,我什么都没找到 :( 最后发现这与conda虚拟环境有关 - 通过pygame git解决了问题。 - Davtho1983
1个回答

5
对于任何试图在Mac上使用Python3从终端运行的人来说,问题似乎在于窗口焦点。要使其正确运行,而不是键入以下内容:
python mygame.py

代替输入:
pythonw mygame.py

请参见 https://github.com/pygame/pygame/issues/359 获取更多信息。

对我来说,这只会导致我的PyGame窗口完全空白。 - pfincent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接