Pygame点击器游戏启动黑屏问题排查与修复
Pygame点击器游戏黑屏问题修复
问题分析
你的代码核心问题是绘制分数、商店菜单以及更新显示的代码缩进错误,脱离了主游戏循环。主循环里只执行了事件处理和背景填充,但关键的绘制元素(分数、商店菜单)和屏幕更新操作都被放到了循环外面——这些代码只会在游戏循环结束后执行一次,而游戏循环会一直运行,导致屏幕始终停留在screen.fill(BLACK)的状态,也就是黑屏。
另外,原代码缺少商店按钮的绘制逻辑,玩家看不到可点击的商店入口,交互体验缺失。
修复步骤
- 将绘制分数、商店菜单的代码以及
pygame.display.update()调整缩进,放入主游戏循环内部,确保每帧都能重新绘制所有元素并刷新屏幕。 - 添加商店按钮的绘制代码,让玩家能直观看到并点击打开商店。
修复后的完整代码
import pygame # 定义颜色常量 BLACK = (0, 0, 0) WHITE = (255, 255, 255) RED = (255, 0, 0) GREEN = (0, 255, 0) # 新增商店按钮颜色 # 初始化Pygame pygame.init() # 设置游戏窗口尺寸 WINDOW_WIDTH = 800 WINDOW_HEIGHT = 600 size = (WINDOW_WIDTH, WINDOW_HEIGHT) screen = pygame.display.set_mode(size) # 设置窗口标题 pygame.display.set_caption("Clicker Game") # 设置字体 font = pygame.font.Font(None, 36) # 初始化分数和单次点击值 score = 0 click_value = 1 # 初始化升级价格 upgrade1_price = 10 upgrade2_price = 50 upgrade3_price = 100 # 初始化商店菜单和红色按钮状态 shop_menu_open = False red_button_visible = True # 绘制商店菜单的函数 def draw_shop_menu(): # 绘制菜单背景 pygame.draw.rect(screen, WHITE, [200, 100, 400, 400]) # 绘制升级选项文本 upgrade1_text = font.render( f"Upgrade 1 (+{click_value + 1} per click): {upgrade1_price} clicks", True, BLACK, ) upgrade1_rect = upgrade1_text.get_rect(center=(WINDOW_WIDTH / 2, 225)) screen.blit(upgrade1_text, upgrade1_rect) upgrade2_text = font.render( f"Upgrade 2 (+{click_value + 5} per click): {upgrade2_price} clicks", True, BLACK, ) upgrade2_rect = upgrade2_text.get_rect(center=(WINDOW_WIDTH / 2, 300)) screen.blit(upgrade2_text, upgrade2_rect) upgrade3_text = font.render( f"Upgrade 3 (+{click_value + 10} per click): {upgrade3_price} clicks", True, BLACK, ) upgrade3_rect = upgrade3_text.get_rect(center=(WINDOW_WIDTH / 2, 375)) screen.blit(upgrade3_text, upgrade3_rect) # 主游戏循环 done = False while not done: # 事件处理 for event in pygame.event.get(): if event.type == pygame.QUIT: done = True elif event.type == pygame.MOUSEBUTTONDOWN: if event.button == 1: mouse_pos = pygame.mouse.get_pos() # 点击商店按钮切换菜单状态 if mouse_pos[0] > 650 and mouse_pos[1] < 30: shop_menu_open = not shop_menu_open red_button_visible = not shop_menu_open # 点击红色按钮加分 elif ( not shop_menu_open and red_button_visible and 350 < mouse_pos[0] < 450 and 250 < mouse_pos[1] < 350 ): score += click_value # 商店内点击升级选项 elif shop_menu_open and 250 < mouse_pos[0] < 550: if 200 < mouse_pos[1] < 250 and score >= upgrade1_price: score -= upgrade1_price click_value += 1 upgrade1_price *= 2 elif 275 < mouse_pos[1] < 325 and score >= upgrade2_price: score -= upgrade2_price click_value += 5 upgrade2_price *= 2 elif 375 < mouse_pos[1] < 425 and score >= upgrade3_price: score -= upgrade3_price click_value += 10 upgrade3_price *= 2 # 填充背景 screen.fill(BLACK) # 绘制商店按钮 pygame.draw.rect(screen, GREEN, [650, 0, 150, 30]) shop_button_text = font.render("Shop", True, BLACK) screen.blit(shop_button_text, (680, 2)) # 绘制红色点击按钮 if red_button_visible: pygame.draw.rect(screen, RED, [350, 250, 100, 100]) # 绘制分数 score_text = font.render(f"Score: {score}", True, WHITE) score_rect = score_text.get_rect() screen.blit(score_text, score_rect) # 绘制商店菜单(如果打开) if shop_menu_open: draw_shop_menu() # 更新屏幕显示 pygame.display.update() # 退出Pygame pygame.quit()
关键修复说明
- 将原本在循环外的绘制、屏幕更新代码移入循环内部,确保每帧都会重新渲染所有元素,解决黑屏问题。
- 添加了绿色的商店按钮,玩家可以直观看到并点击交互。
- 优化了部分条件判断的写法,提升代码可读性。
内容的提问来源于stack exchange,提问作者Kishiyami
相关产品推荐
相关产品推荐

