【问题标题】:Python / PyGame: Set font.render() alphaPython / PyGame:设置 font.render() alpha
【发布时间】:2015-05-09 19:23:41
【问题描述】:

我知道,如何为 pygame.Surface 或 pygame.image 设置 alpha。那将是:

surface.set_alpha(alpha)

但是如何为标签做到这一点,由

label = font.render("I'm a label", True, [255,255,255])

有人知道吗?

label.set_alpha(1)

没有对它做任何事情。当我把它贴上去的时候,它是完全着色的。

如果你不知道,我的意思是 - 随时问:)

【问题讨论】:

    标签: python pygame label alpha blit


    【解决方案1】:

    当你调用 font.render 时,你会得到一个surface。如果您查看documentation,它会显示:

    "在新的 Surface 上绘制文本 渲染(文本,抗锯齿,颜色,背景=无)-> 表面”

    “-> Surface”表示它返回一个表面。

    所以基本上,你的标签应该像 pygame 中的任何图像一样工作。您可以尝试这样做以确保 pygame 将标签视为表面:label = pygame.Surface((label.get_width(), label.get_height()), label)

    此外,您可能会遇到锁定表面的问题。解锁只需pygame.Surface.unlock()pygame.Surface.lock() 锁定

    更新: 我不知道您遗漏了一些细节有什么问题,因为它应该可以工作。

    import pygame
    pygame.init()
    s = pygame.display.set_mode((500, 500))
    font = pygame.font.SysFont("comicsansms", 20)
    label = font.render("hello", 0, (255,255,255))
    label.set_alpha(100)
    while True:
        s.fill((0,0,0))
        s.blit(label, (0,0))
        pygame.display.update()
    

    【讨论】:

    • 当我写:label = pygame.Surface(label) 时出现错误,因为 pygame.Surface 需要宽度和高度,而不是渲染字体作为参数。
    • 我的道歉试试这个label = pygame.Surface((label.get_width(), label.get_height), label)
    • 同样的错误,导致最后一个“标签”必须是整数。顺便说一句,你忘了 label.get_height 后面的“()”
    • Surface((width, height), flags=0, Surface) -> Surface 就是它所说的。尝试给标志一个数字,所以现在试试这个。 label = pygame.Surface((label.get_width(), label.get_height()), flags=0, label)
    • 不起作用 - 它不接受最后一个标签,因为我以前写过“flags=..”,现在我不能写像“Surface="这样的东西,因为那不存在。如果我不在0前面写“flags=”,它认为我的意思是“标签”的深度。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多