Pygame на MacOs не будет отображать никаких поверхностей - PullRequest
0 голосов
/ 26 мая 2019

Я следую очень основному учебнику по пигмеям, который я делал раньше. Я подозреваю, что есть проблема с версией, хотя я не знаю, как двигаться дальше.

macOS 10.14.4
Python 3.7.2
pip 18.1 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)

код:

import pygame
from pygame.locals import *

pygame.init()
screen = pygame.display.set_mode((800,600))

surf = pygame.Surface((75,25))
surf.fill((125,125,125))
# What does this rect do?
rect = surf.get_rect()

running = True

while running:
    for event in pygame.event.get():
        if event.type == KEYDOWN:
            if event.key == K_ESCAPE:
                running = False
        elif event.type == QUIT:
            running = False
    screen.blit(surf, (400,300))
    pygame.display.flip()

Единственный вопрос, который у меня есть, для чего это прямоугольное назначение? Я не могу скрыть прямоугольник, поэтому он, кажется, не имеет смысла.

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

empty pygame display

Нет ошибок в консоли. Я действительно не уверен, как отлаживать на этом этапе.

1 Ответ

1 голос
/ 26 мая 2019

Здесь нечего отлаживать. rect = surf.get_rect() не используется, может быть, как сказал Мартино в комментарии, позже будет использовано в учебнике.

Код выполняет рисование маленького серого прямоугольника на серой поверхности (поэтому вы ничего не видите).

surf = pygame.Surface((75,25))

Это создает маленькую серую поверхность, которая позже появляется в основном цикле в координатах (верхний левый угол) 400, 300:

screen.blit(surf, (400,300))

Как я уже сказал, причина, по которой вы этого не видите, заключается в том, что surf ил заполнен серым (эта строка):

surf.fill((125,125,125))

и ваш фон тоже серый. Я не знаю, зависит ли это от системы, на моем linux фон черный, а прямоугольник хорошо виден.

screenshot

Поэтому попробуйте изменить цвет прямоугольника на что-то более четкое или более темное или залейте поверхность дисплея черным перед основным циклом, выполнив:

screen.fill((0, 0, 0))
...