You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pygame点击器游戏启动黑屏问题排查与修复

Pygame点击器游戏黑屏问题修复

问题分析

你的代码核心问题是绘制分数、商店菜单以及更新显示的代码缩进错误,脱离了主游戏循环。主循环里只执行了事件处理和背景填充,但关键的绘制元素(分数、商店菜单)和屏幕更新操作都被放到了循环外面——这些代码只会在游戏循环结束后执行一次,而游戏循环会一直运行,导致屏幕始终停留在screen.fill(BLACK)的状态,也就是黑屏。

另外,原代码缺少商店按钮的绘制逻辑,玩家看不到可点击的商店入口,交互体验缺失。

修复步骤

  1. 将绘制分数、商店菜单的代码以及pygame.display.update()调整缩进,放入主游戏循环内部,确保每帧都能重新绘制所有元素并刷新屏幕。
  2. 添加商店按钮的绘制代码,让玩家能直观看到并点击打开商店。

修复后的完整代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 19:24:58