Pygame Незаконная инструкция 4? - PullRequest
0 голосов
/ 21 января 2019

Я делаю игру в 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".

Единственный поток, который предоставил какое-либо решение, был таким: Недопустимая инструкция: 4 на MacOS High Sierra

Когда мы изменили строку «pygame.init ()» на «pygame.font.init ()», код работал нормально как на его машине, так и на моей, что странно, потому что pygame.font.init () должен только инициализировать pygame.font?

Кто-нибудь знает, почему это работает и / или имеет лучшее решение этой проблемы?

Версия Python 3.6, версия pygame 1.9.4.

1 Ответ

0 голосов
/ 21 января 2019

Согласно документам pygame.org

Вы всегда можете инициализировать отдельные модули вручную, но 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()))

Здесь вы можете увидеть все индексы модуля pygame и проверить, нужно ли их инициализировать.

Теперь причина, по которой ваш друг получает Недопустимая инструкция: 4 очень вероятно из-за проблемы , описанной в этой теме . Я бы порекомендовал следовать инструкциям из ответа (и прочитать причину, по которой это происходит), попробовать удалить pygame, а затем установить снова с

$ pip install --no-binary pygame pygame

это, скорее всего, решит его проблему. Надеюсь, это ответило на ваши вопросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...