在 Pygame 中绘制矩形时的边框行为

Border behaviour when drawing a rectangle in Pygame

我正在关注 YouTube 上由 Clear Code 发布的 Pygame 教程。到目前为止一切顺利,但我 运行 发现视频中的演示与我的代码行为不一致,我很确定我完全按照教程的指示进行操作,但我的结果不同.

我正在尝试围绕一个矩形绘制边框,该矩形是从包含如下文本的表面创建的。

test_font = pygame.font.Font('font\Pixeltype.ttf',50)
score_surf = test_font.render('My Game', False, 'Black')
score_rect = score_surf.get_rect(center = (400,50))
#Later in the main loop
pygame.draw.rect(screen,'Pink',score_rect)
pygame.draw.rect(screen,'Pink',score_rect, 6)

我的理解是第一个 pygame.draw.rect 应该在 score_rect 区域着色,第二个应该创建一个略微超出 score_rect 区域的边框。这应该在文本周围留下一点可见的粉红色。在视频中我可以看到这种情况,但是当我 运行 我系统上的代码时,第二个 pygame.draw.rect 指定边框宽度似乎没有任何效果。

我已经通过删除第一个 pygame.draw.rect 进行了一些实验,这主要按预期工作我的文本周围有一个粉红色的矩形边框,但这个边框严格地插入 score_rect。

根据 Pygame 文档,指定宽度参数应该会导致边框略微超出 score_rect。但是我没有看到这种行为。

Link 到 Pygame 我正在阅读的文档 https://www.pygame.org/docs/ref/draw.html#pygame.draw.rect

Link 我正在关注的 Youtube 视频,以及视频中的位置 https://youtu.be/AY9MnQ4x3zk?t=4879

编辑:对不起,我忘了记下我的软件版本 Pygame:2.1.2 Python:3.10.2 OS Windows 10

如有任何帮助,我们将不胜感激。

我在其他网站上遇到过有人问这个确切的问题(不是很容易搜索的方式,别担心),所以我主要是复制粘贴我上一个答案。

在 pygame 的最新版本中,draw.rect 已更改为提供“实际矩形”。这具有在许多情况下看起来更干净的优势,并且它们的算法现在明显更快,有助于提高性能。

实际上,我在 discord 上与某人谈过与你完全相同的问题(比如来自同一个教程),我们决定使用 rect.inflate() 调用来扩大矩形,然后再将其绘制在文字.

例如,您可以这样做

pygame.draw.rect(screen, 'Pink', score_rect.inflate(10,10)) 而不是 Clear 的两个 rect 调用。

或者,如果您想保留轻微的圆角,您可以这样做

pygame.draw.rect(screen, 'Pink', score_rect.inflate(10,10), border_radius=3)

所以这只是使用 Rect.inflate 调用的 return 值而不是原始 Rect 本身。 Inflate 需要一个 x 边距和一个 y 边距,并且 returns 一个 Rect larger/smaller 这些数量,但仍然在同一位置居中。