pygame非法指令4?

时间:2019-01-21 17:25:35

标签: python-3.x macos pygame

我正在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。

1 个答案:

答案 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

这很可能会解决他的问题。希望这能回答您的问题。