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

Pygame平台游戏背景随机星星固定显示问题求助

解决Pygame星星背景固定位置问题

问题核心

你的drawBackdrop()每帧都会重新生成星星的随机位置和大小,导致星星一直在闪烁变化。要实现固定位置的星星,需要把星星数据的生成与绘制分离:只在初始化或场景/主题切换时生成一次星星的位置、大小数据,之后每帧仅用这些固定数据绘制星星。

具体修改步骤

  1. 添加存储星星数据的容器
    在全局变量中新增一个列表,用来保存所有星星的位置和大小信息:
# 在globals模块中添加
stars = []
  1. 编写单独的星星生成函数
    创建一个专门生成星星数据的函数,仅在需要时调用(比如场景初始化、主题切换):
def generateStars():
    globals.stars.clear()  # 清空旧数据
    if globals.theme == "dark":
        numberOfStars = random.randint(35, 55)
        for _ in range(numberOfStars):
            size = random.randint(3, 12)
            x = random.randint(5, globals.screen_width - 12)
            y = random.randint(5, globals.screen_height - 12)
            globals.stars.append( (x, y, size) )
  1. 修改drawBackdrop()为纯绘制函数
    让这个函数只负责遍历已有的星星数据并绘制,不再每帧生成新数据:
def drawBackdrop():
    if globals.theme == "dark":
        for x, y, size in globals.stars:
            starRect = pygame.Rect(x, y, size, size)
            pygame.draw.rect(globals.screen, "White", starRect)
    if globals.theme == "light":
        pass # Sun and Clouds
  1. 控制生成时机
  • 在场景初始化时调用generateStars(),确保进入场景时星星就生成完毕:
# 场景类的初始化方法中
def __init__(self):
    # 其他初始化逻辑
    generateStars()
  • 如果有主题切换功能,在切换主题后也调用generateStars(),确保新主题下的星星重新生成:
def switchTheme(new_theme):
    globals.theme = new_theme
    generateStars()

效果说明

修改后,星星的位置和大小只会在初始化或主题切换时生成一次,每帧调用drawBackdrop()时仅重复绘制这些固定的星星,就能实现背景星星固定不动的效果。

内容的提问来源于stack exchange,提问作者Arya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:30:22