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
相关产品推荐
相关产品推荐

