Pygame работает некорректно - PullRequest
1 голос
/ 08 мая 2020

Я не могу запускать что-либо с помощью pygame, поскольку всякий раз, когда я запускаю что-либо, даже очень простую программу, отображающую кружок, программа выдает черный экран, который ничего не делает.

Черный экран, о котором я говорю это черный экран

Что это именно? и есть ли способ исправить это?

Изменить: я забыл упомянуть, что программа, похоже, работает нормально, и у меня нет ошибок.

Изменить № 2: Это мой очень простой программа:

import pygame
pygame.init()

screen = pygame.display.set_mode([500, 500])

running = True
while running:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

screen.fill((255, 255, 255))

SCREEN_TITLE = 'Chess Game'
pygame.display.set_caption(SCREEN_TITLE)

pygame.draw.circle(screen, (0, 0, 255), (250, 250), 75)

pygame.display.flip()

pygame.quit()

Редактировать # 3: изображение того, что отображается на python консоли после того, как я нажму кнопку выхода

перед тем, как я нажмите кнопку выхода

1 Ответ

1 голос
/ 08 мая 2020

Вы можете столкнуться с двумя отдельными проблемами:

Проблема 1: установка Pygame на MacOS

При запуске PyGame с MacOS есть несколько задокументированных проблем. Убедитесь, что вы правильно установили и настроили pygame на своем компьютере. Этот пост может быть полезен.

Проблема 2: Исправления кода

Кроме того, в вашем коде есть несколько проблем. Ваш запущенный l oop ничего не отображает, так как он зависает при обработке событий и ничего более. Поэтому вы видите черный экран. Обратите внимание, что вы распечатываете экран и круг после завершения выполнения.

При использовании pygame я предлагаю различать:

  • Инициализация: Настройка pygame и screen. Рендеринг любого статического c содержимого.
  • Запуск l oop: обработка событий и рендеринг любого динамического c содержимого.
  • End: отображение любой конечной анимации / объекта и завершение pygame .

Я предлагаю следующие модификации:

  • Сначала визуализируйте экран
  • В запущенном l oop просто обрабатывайте события и визуализируйте круг
  • Я добавил отладочные сообщения. Вы можете включить и отключить их, запустив python mygame.py и python -O mygame.py. Имейте в виду, что операторы print внутри запущенного l oop будут печатать много сообщений.

Вот код:

#!/usr/bin/python

# -*- coding: utf-8 -*-

# For better print formatting
from __future__ import print_function

# Imports
import pygame


#
# MAIN FUNCTION
#
def main():
    # Setup display and static content
    if __debug__:
        print("Initialising pygame")
    pygame.init()
    SCREEN_TITLE = 'Chess Game'
    pygame.display.set_caption(SCREEN_TITLE)
    screen = pygame.display.set_mode([500, 500])
    screen.fill((255, 255, 255))
    pygame.display.flip()    

    # Running loop
    running = True
    while running:
        if __debug__:
            print("New iteration")
        # Process events
        if __debug__:
            print("- Processing events...")
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False

        # Display any dynamic content
        if __debug__:
            print("- Rendering dynamic content...")
        pygame.draw.circle(screen, (0, 0, 255), (250, 250), 75)

        # Update display
        if __debug__:
            print("- Updating display...")
        pygame.display.flip()

    # End
    if __debug__:
        print("End")
    pygame.quit()


#
# ENTRY POINT
#
if __name__ == "__main__":
    main()

Вывод отладки:

$ python mygame.py 
pygame 1.9.6
Hello from the pygame community. https://www.pygame.org/contribute.html
Initialising pygame
New iteration
- Processing events...
- Rendering dynamic content...
- Updating display...
.
.
.
New iteration
- Processing events...
- Rendering dynamic content...
- Updating display...
End

Дисплей:

Game display

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