pygame.error: 无效的每像素位数(范围为{8...32})

0 投票
1 回答
766 浏览
提问于 2025-04-18 14:19

我来这里是因为我有一个具体的问题,还没有找到答案,跟pygame这个库有关。我的问题特别是关于如何触发全屏模式,下面这段代码就是我用来实现的:

class SHMUpyGame(object):
def __init__(self):

    pygame.init()  # Start up pygame

    if fullscreen is False:
        self.screen = pygame.display.set_mode((windowx, windowy), pygame.DOUBLEBUF)
    else:
        self.screen = pygame.display.set_mode((windowx, windowy), pygame.DOUBLEBUF, pygame.FULLSCREEN)
    self.flags = pygame.Surface.get_flags(self.screen)
    self.caption = pygame.display.set_caption("SHMUpy - Main")
    self.background = pygame.Surface(self.screen.get_size()).convert()
    self.clock = pygame.time.Clock()
    self.font = pygame.font.SysFont('mono', 12)

但是运行后却出现了以下错误:

 Traceback (most recent call last):
  File "C:/SHMUPY_ENGINE/main/engineOOP.py", line 61, in <module>
    SHMUpyGame().go()
  File "C:/SHMUPY_ENGINE/main/engineOOP.py", line 27, in __init__
    self.screen = pygame.display.set_mode((windowx, windowy), pygame.DOUBLEBUF, pygame.FULLSCREEN)
  pygame.error: Invalid bits per pixel (range is {8...32})

我想这可能和pygame.FULLSCREEN有关,但我搞不清楚具体问题出在哪。

有没有人能帮我解决这个问题呢?

1 个回答

4

你把 pygame.FULLSCREEN 放在了 set_mode 函数的 depth 参数的位置(具体可以查看文档,这是第三个参数)。

你其实想做的是把这两个标志组合起来,然后把这个组合作为第二个参数(flags)传进去。组合标志时,可以用位或运算符(也就是竖线 |):

pygame.display.set_mode((windowx, windowy), pygame.DOUBLEBUF | pygame.FULLSCREEN)

记得在遇到这类问题时,先查看文档并仔细确认。如果你查看上面链接的这个函数的文档,在列出可用标志之前,有一段信息会对你很有帮助:

标志参数控制你想要的显示类型。有好几种可以选择,你甚至可以使用位或运算符(竖线“|”字符)来组合多种类型。

撰写回答