渲染不适用于 str 对象

render doesn't apply to a str object

import pygame
from pygame.locals import *

pygame.init()
surf = pygame.display.set_mode((400,400))

pygame.draw.rect(
    surface = surf,
    color = (0,255,255),
    rect = (100,100,100,50)
    )

clock = pygame.time.Clock()

t = pygame.font.Font.render("Change Color",1,(255,255,255))


display.blit(
    source = t,
    dest = (100,100,100,50),
    area = None,
    special_flags = 0
    )

pygame.display.update()

我收到的错误信息是这样的:

    t = pygame.font.Font.render("Change Color",1,(255,255,255))
TypeError: descriptor 'render' for 'pygame.font.Font' objects doesn't apply to a 'str' object

我做错了什么?

我想通了...

首先,render 不接受位置参数,所以我们不能使用它们。

Link 到文档:

其次,您必须指定要使用的字体。

接下来我尝试使用这个:

import pygame
from pygame.locals import *

pygame.init()

font_game = pygame.font.SysFont("Arial",20)

t = pygame.font.Font.render(
    "Testing: ",
    1,
    (255,255,255)
    )

但这是错误的

TypeError: descriptor 'render' for 'pygame.font.Font' objects doesn't apply to a 'str' object

如果您查看位于此处的文档:

https://www.pygame.org/docs/ref/font.html#pygame.font.Font.render

这些是参数:

render(text, antialias, color, background=None)

背景是一个可选参数,我指定了 3 个参数,所以我做错了什么?

安装 pygame 时,下载的文件之一是 font.pyi 文件。

如果您查看该文件,您会发现:

class Font(object):

    def __init__(self, name: Union[AnyPath, IO[Any], None], size: int) -> None: ...
    def render(
        self,
        text: str,
        antialias: bool,
        color: _ColorValue,
        background: Optional[_ColorValue] = None,
    ) -> Surface: ...

(该文件中还有更多内容,但这是重要的部分)。

您不仅必须指定文本、抗锯齿和颜色,而且如果您查看 class、def __init__ 中的第一行,它会告诉您您需要指定字体和大小。

一旦我将代码更改为此,它就可以正常工作:

font_game = pygame.font.SysFont("Arial",20)

t = pygame.font.Font.render(
    font_game,
    "Testing: ",
    1,
    (255,255,255)
    )