【问题标题】:Printing text - Pygame打印文本 - Pygame
【发布时间】:2023-03-11 20:11:01
【问题描述】:

我想知道如何使用 pygame 打印文本,目前我有这个代码(我认为它可以工作但没有用):

for player in player_list:

    block_hit_list = pygame.sprite.spritecollide(player, block_list, True)

    for block in block_hit_list:
        health -= 25
        collision.play()

        if health == 0:
            font = pygame.font.Font("freesansbold.ttf", 30)
            label = font.render("GAME OVER", 1, (255,100,0))
            screen.blit(label, (400, 300))
            break


    if health == 0:
        gameover.play()
        collision.stop()
        player_list.remove(player)
        all_sprites_list.remove(player)
        block_list.remove(block)
        all_sprites_list.remove(block)

我不知道为什么它不打印,如果有人有任何建议我很感激帮助!

【问题讨论】:

标签: python text io pygame


【解决方案1】:

尝试添加:

labelRect = label.get_rect()
labelRect.center = (400, 300)

在写着label = font.render...的行下

然后,将screen.blit 行替换为:

screen.blit(label, labelRect)

我希望这会有所帮助。

【讨论】:

  • 嗨,非常感谢您的回复 :) 我尝试了您的建议,但不幸的是仍然没有显示文本,我已经更新了上面的代码以显示周围的行(如果这有帮助吗?)我对 python 很陌生,所以任何帮助都将不胜感激。
  • 再次感谢您的回复,我已经应用了建议的更改,但仍然没有打印文本 :( 我真的不知道为什么会这样,但这是我的完整代码,以防我制作明显/愚蠢的错误:pastebin.com/T7NRxdEW
【解决方案2】:

由于我还不能对您的问题发表评论,所以我必须已经回答了。您能否提供整个代码,尤其是更新显示的部分?我几乎 100% 确定您先对文本进行 blit,然后填充屏幕并对游戏的其余部分进行 blit,因此文本实际上是 blitting,但随后被填充和其他 blitting 覆盖。

但是像这样我帮不了你。你这样做的方式应该行得通。

【讨论】:

  • 当然,我在这里上传了整个代码:pastebin.com/T7NRxdEW 感谢您的回复,如果我犯了任何愚蠢的错误,我深表歉意,我对 python 很陌生
  • 我只是快速浏览了一下,因为我现在很着急,但我的分析似乎是对的:你似乎在 health == 0 部分中进行了测试,然后你更新屏幕,将背景覆盖在上面。在你有 screen.blit(background, (0,0) 之后放置 Game-over 文本的 blitting。为了防止错误这样说: screen.blit(background, (0,0)) if label != None: screen.blit(label, labelRect) 并在定义变量的开头添加 label = None。作为“一般规则”:将所有要 blit 的内容放在一个列表中,然后按此列表执行一次 blitting
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-08
  • 2020-10-07
  • 2020-10-11
  • 1970-01-01
  • 1970-01-01
  • 2019-07-07
  • 1970-01-01
相关资源
最近更新 更多