Pygame检测到碰撞时无法在两张背景图片之间切换该如何解决
问题原因
- 你当前在碰撞检测逻辑中直接将
bg_bool固定赋值为True,第一次碰撞后这个变量会永久保持True状态,后续再触发碰撞也不会改变背景的判断条件,自然不会切换。 - 你之前尝试在渲染背景的分支里直接改
bg_bool = False,相当于每次游戏循环都会把刚改完的状态再改回去,视觉上就会一直停留在第一张背景。 - 额外说明:你当前击中气球后会用
colors[i].fill((0,0,0,0))把对应气球设为完全透明,该气球后续不会再触发碰撞,如果你需要多次测试切换,可临时注释掉这行代码。
解决方法
只需要修改check_collisions函数里的bg_bool赋值逻辑,将固定赋值改为状态翻转即可,修改后的代码片段如下:
def check_collisions(x, y): global hit_var global hit global score global scoretext global bg_bool for i in range(num_balloons): gun_rect = gun.get_rect(topleft = (x,y)) gun_mask = pg.mask.from_surface(gun) balloon_rect = colors[i].get_rect(topleft = (balloon_list[i], y-100)) balloon_mask = pg.mask.from_surface(colors[i]) offset = (balloon_rect.x - gun_rect.x), (balloon_rect.y - gun_rect.y) if gun_mask.overlap(balloon_mask, offset): # 把原来的bg_bool = True改成下面这行,每次碰撞翻转状态 bg_bool = not bg_bool hit_var = i print(f'hit balloon: {i}') # 不需要重复触发的话保留下面这行,需要重复测试可以注释掉 colors[i].fill((0,0,0,0)) screen.fill((0,0,0,0))
改完之后每次触发有效碰撞,背景都会在两张图之间切换一次。
内容的提问来源于stack exchange,提问作者Krishay Rastogi
相关产品推荐
相关产品推荐

