pygame.draw.line绘制鱼线不随鱼漂移动更新问题求助
问题根源
你在实例化FishLine对象时,传入的(float.x, float.y)是实例创建时刻的鱼漂坐标快照,属于值传递,后续鱼漂的x/y属性更新后,FishLine实例中存储的self.float_pos仍为初始的旧值,不会自动同步,因此鱼线不会跟随鱼漂移动。
修复方案(推荐第一种)
方案1:动态读取鱼漂坐标(更易维护)
修改FishLine类的逻辑,初始化时传入鱼漂实例本身而非固定坐标,每次绘制鱼线时实时读取当前鱼漂坐标:
class FishLine(): def __init__(self, GameDisplay, color, fishingrod_end, float_obj, lineThickness): self.GameDisplay = GameDisplay self.color = color self.fishingrod_end = fishingrod_end self.float_obj = float_obj # 存储鱼漂实例的引用 self.lineThickness = lineThickness def draw(self): # 每次绘制时获取最新的鱼漂坐标 current_float_pos = (self.float_obj.x, self.float_obj.y) pygame.draw.line(self.GameDisplay, self.color, self.fishingrod_end, current_float_pos, self.lineThickness)
对应修改实例化代码即可:
# 注意不要用类名作为实例名,避免覆盖类定义,这里修改为fish_line fish_line = FishLine(gameDisplay, red, (383, 230), float, 6)
同时记得修改draw()函数里的鱼线绘制调用为fish_line.draw()。
方案2:手动同步坐标
如果不想修改FishLine类结构,可以在主循环的鱼漂移动逻辑结束后,手动更新鱼线的坐标属性:
if not Game_Paused and AtTheRiver: if keys[pygame.K_a] : float.x -= float.vel if keys[pygame.K_d] : float.x += float.vel if keys[pygame.K_s] : float.y += float.vel if keys[pygame.K_w] : float.y -= float.vel # 新增一行,手动同步鱼漂坐标到鱼线实例 FishLine.float_pos = (float.x, float.y)
额外注意
你当前的代码存在实例名和类名重名的问题:FishLine = FishLine(...),这种写法会覆盖原本的FishLine类定义,后续如果要创建新的鱼线实例会报错,建议统一使用小写蛇形命名法命名实例,比如fish_line。
内容的提问来源于stack exchange,提问作者KermitHQ
相关产品推荐
相关产品推荐

