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

Pygame Zero开发《Road Rage》游戏燃料罐无法生成显示问题

故障修复方案

1. 主循环未调用燃料罐更新逻辑

你已经编写了update_fuel_cans()函数处理燃料罐的位移、新罐生成、碰撞检测逻辑,但主更新函数update()中没有调用该方法,导致所有燃料罐相关逻辑从未执行,自然无法生成、显示新的燃料罐Actor。

2. 燃料罐删除条件逻辑错误

update_fuel_cans()中的移除条件写反,你当前设置的是fuel_bag.y < WIDTH + 250时删除燃料罐,初始生成的燃料罐y坐标为-250,远小于该阈值,生成后立刻被移出列表,不会进入渲染环节。

3. 可选规范修正

Python中判断字符串值相等应使用==运算符,is用于判断两个对象的内存地址是否一致,虽然小字符串驻留机制可能让is暂时生效,但属于不规范写法,建议将所有mode is 'xxx'的判断改为mode == 'xxx'。


代码修改示例

修正update()函数,添加燃料罐逻辑调用

def update():
    global fuel_level, mode
    if mode == 'menu' and player.y < HEIGHT / 2:
        player.y = HEIGHT / 2
    if mode == 'game':
        fuel_level -= 1
        if fuel_level <= 0:
            mode = 'game over'
        for bag in fuel_cans:
            for car in random_cars:
                while bag.colliderect(car):
                    bag.x = choice([WIDTH/2-200, WIDTH/2, WIDTH/2+200])
        update_road()
        update_random_cars()
        update_fuel_cans() # 新增该行调用燃料罐更新逻辑
        player.y = HEIGHT / 2 + 200

修正update_fuel_cans()的移除逻辑

def update_fuel_cans():
    global fuel_level
    if fuel_cans[-1].y >= 400:
        new_fuel_bag()
    # 用列表副本遍历避免边遍历边删除导致的索引错乱问题
    for fuel_bag in fuel_cans.copy():
        fuel_bag.y += 10
        if fuel_bag.colliderect(player):
            fuel_level += 200
            fuel_cans.remove(fuel_bag) # 收集后移除燃料罐避免重复计算
        elif fuel_bag.y > WIDTH + 250: # 原<改为>,燃料罐移出屏幕下方再删除
            fuel_cans.remove(fuel_bag)

额外验证点:请确认项目images目录下存在命名为fuel_bag的对应格式图片(Pygame Zero支持png、jpg等常见格式)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:45:01