我正在pygame中制作游戏,而我的朋友在尝试运行以下代码时遇到以下问题。
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption('winter gam')
pygame.display.update()
running = True
clock = pygame.time.Clock()
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
running = False
clock.tick(60)
screen.fill((0, 0, 0))
pygame.draw.rect(screen, (255, 0, 0), [10, 10, 100, 100])
pygame.display.update()
pygame.quit()
我在Linux发行版上很好地运行了此代码,但我的朋友(正在运行OSX 10.13.6)在尝试运行该错误时说“非法指令:4”。
唯一提供任何解决方案的线程就是这个:Illegal instruction: 4 on MacOS High Sierra
当我们将“ pygame.init()”行更改为“ pygame.font.init()”时,代码在他的机器以及我的机器上都可以正常工作,这很奇怪,因为pygame.font.init()应该只初始化pygame.font?
有人知道为什么这样做有效和/或有更好的解决方案吗?
Python版本是3.6,pygame版本是1.9.4。
答案 0 :(得分:1)
According to the pygame.org docs
您始终可以手动初始化各个模块,但是 pygame.init()是一种开始一切的便捷方法。
这告诉我们,甚至没有必要调用init()
,这说明了即使丢失了代码仍可以工作的原因。在代码示例中,唯一需要初始化的是display
模块,但是出于某些奇怪的原因,display
模块在调用pygame.display.set_mode((640, 480))
时会自行初始化。您可以通过以下代码示例看到它的发生:
import pygame
print("Before: " + str(pygame.display.get_init()))
screen = pygame.display.set_mode((640, 480))
print("After : " + str(pygame.display.get_init()))
You can see all of the pygame module indexes here并检查是否需要初始化。
现在,您的朋友得到非法指令:4 的原因很可能是由于issue explained in this thread造成的。我建议您按照答案中的说明进行操作(并阅读发生这种情况的原因),尝试卸载pygame,然后再次使用
进行安装$ pip install --no-binary pygame pygame
这很可能会解决他的问题。希望这能回答您的问题。