Pygame 碰撞触发后得分文本固定显示不消失的实现咨询
Pygame 得分文本永久显示解决方案
核心逻辑是新增状态标记变量记录是否触发过首次碰撞,只要标记为真就每帧固定绘制文本,不需要依赖实时碰撞判定。
实现步骤
- 游戏初始化时新增布尔变量标记文本显示状态,默认值为
False,同时提前预渲染得分文本(避免每帧重复渲染消耗性能) - 保留原碰撞判定逻辑,首次碰撞时仅修改状态标记为
True,无需在碰撞分支里绘制文本 - 主循环的全局绘制逻辑中新增判断:只要状态标记为
True,每帧都执行文本绘制操作
代码示例
初始化阶段新增代码
# 初始化显示标记 show_score = False # 提前预渲染得分文本,仅需执行一次 font = pygame.font.SysFont(None, 48) text = font.render("Points: 0", True, (255, 255, 255))
主循环修改代码
# 原有碰撞判定逻辑调整 if Rect_player.colliderect(Begin_Rum): show_score = True Begin_ColorShape = (0,0,0) Y -= 990 # 全局绘制区域新增:每帧判断是否显示文本,和碰撞状态无关 if show_score: screen.blit(text, (60, 60))
注意事项
你当前的示例代码里碰撞对象拼写为
Begim_Rum,和你定义的触发方块名Begin_Rum不一致,建议修正避免碰撞判定失效。
后续需要更新得分数值时,仅需重新执行text = font.render(f"Points: {score}", True, (255,255,255))更新文本内容即可,显示状态无需修改。
内容的提问来源于stack exchange,提问作者Pensathor
相关产品推荐
相关产品推荐

