【问题标题】:pygame on MacOs won't show any surfacesMacOs 上的 pygame 不会显示任何表面
【发布时间】:2019-10-12 07:54:29
【问题描述】:

我正在学习一个非常基本的 pygame 教程,这是我以前做过的。我怀疑存在版本问题,尽管我不知道如何继续前进。

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()

我唯一的问题是那个 rect 赋值是为了什么?我不能 blit 矩形,所以它似乎没有任何目的。

我浏览了其他几个教程,复制粘贴代码,每个教程都得到相同的结果:没有矩形的白屏。就好像显示代码有效,但任何其他表面都没有出现。

控制台中没有错误。我现在真的不确定如何调试。

【问题讨论】:

  • 你是对的,rect = surf.get_rect() 没有用,因为rect 没有在以下任何代码中使用。 AFAIK 鉴于没有任何改变表面surf,您会看到更正的输出。也许这段代码只是更高级/涉及的代码的开始,稍后将在教程中讨论和添加。

标签: python pygame surface


【解决方案1】:

这里没有什么要调试的。 rect = surf.get_rect()没用过,可能像评论里说的martineau,后面教程会用到。

代码所做的是在灰色表面上绘制一个灰色的小矩形(这就是你什么都看不到的原因)。

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

这将创建一个小的灰色表面,稍后在主循环中的坐标(左上角)400、300 处进行 blit:

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

正如我所说,你看不到它的原因是因为surf il 填充了灰色(这一行):

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

你的背景也是灰色的。我不知道这是否与系统有关,在我的 linux 上,背景是黑色的,矩形清晰可见。

所以尝试将矩形的颜色更改为更清晰或更暗,或者在主循环之前用黑色填充显示表面:

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

【讨论】:

  • 问题是,我已经为小矩形表面尝试了多种颜色:(0,255,0) 是最后一种,但我尝试了很多。你给屏幕上色的想法是个好建议,但它对屏幕也没有影响。在你的屏幕上看到它让我认为这是一个 macOS 问题,我只是不知道如何排除故障
  • 嗯,是的,是可能的。看看这里,也许有帮助:github.com/pygame/pygame/issues/555
猜你喜欢
  • 1970-01-01
  • 2019-03-16
  • 1970-01-01
  • 1970-01-01
  • 2021-06-29
相关资源
最近更新 更多